c/c++语言开发共享Objective C / C中的命名约定,以“_”开头?

我看到ppl的东西定义了这样的变量:

b2World *_world; b2Body *_body; CCSprite *_ball; 

代替

 b2World *world; b2Body *body; CCSprite *ball; 

我熟悉第二个,但不是第一个。 所以,我检查了维基百科有关命名约定的内容:

以双下划线或下划线和大写字母开头的名称保留用于实现(编译器,标准库),不应使用(例如__reserved或_Reserved)。

那么,是否有以“_”开头的任何特殊含义?

我看到使用“_”开始的代码在这里:

https://www.raywenderlich.com/457/intro-to-box2d-with-cocos2d-tutorial-bouncing-balls

维基页面。

    在一些Objective-C开发人员中,有一个长期惯例,即使用下划线为实例变量添加前缀。 它有以下几种方式:一,它可以更容易地发现.m文件中的实例变量; 二,它使开发人员不必为方法参数提出创意名称,以避免与实例变量名冲突; 正如其他人所指出的那样,它表示实例变量是私有的,因此不应该在整个代码中无法访问它们。

    实际上,我认为避免直接在访问器(getter和setter),- -dealloc-init...之外的方法中访问实例变量。 并不是说你永远不应该在其他任何地方使用它们,但是在其他方法中直接使用实例变量之前,你至少应该考虑一下。

    这真的很有帮助,但大多数人都不知道为什么,这是一种耻辱。 Apple使用下划线来分隔其他对象访问特定对象变量的方式,以及特定对象访问其自身变量的方式。 现在这可能听起来有点奇怪,但想象如下:您可能都认识到以下编译器警告

     .h @property (nonatomic, retain, readonly) UITableView *tableView; .m - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self loadSomethingElseForTableView:tableView]; } 

    这将导致编译器警告,因为它不知道您是否引用了局部变量“tableView”或实例变量。 因此,Apple建议您将以下内容添加到@implementation的顶部。

     @synthesize tableView = _tableView; 

    现在,当您引用_tableView ,编译器知道您指的是实例变量,而不是本地变量。

    此外,这使得更容易理解Obj-C中的垃圾收集,并防止出现常见错误。

    例如,执行以下操作时:

     @property (nonatomic, retain, readonly) NSString *title; - (id)initWithTitle:(NSString *)title { if ((self = [super init])) { self.title = title; // Is not possible, since it's read only. title = title; // Is not possible, since it's the same (local) variable. // Changing the method to initWithTitle:(NSString *)aTitle; title = aTitle; } return self; } 

    现在,既然你没有使用默认的setter(实际上,你不能,因为它是只读的)你需要自己保留变量。 当你为每个实例变量赋一个前缀时,这会更容易记住(所以你知道你需要自己保留它)。

    因此,基本上,了解self.variable和( _variable之间的区别非常重要。 (即: self.variable映射到[self setVariable:...]variable直接映射到指针。

    此外,当您将其添加为私有变量时,如下所示:

     @interface TSSomeObject : NSObject { @private NSString *_privateTitle; } @end 

    除非您遇到具有相同名称的局部变量,否则下划线前缀不是必需的。 除此之外,同样,它也是一种简单的方法来提醒您它是一个本地指针,并且在将变量分配给对象时需要保留(和释放)变量。

    有什么问题是创建一个带下划线前缀的属性,如下所示:

     @property (nonatomic, retain) NSString *_title; 

    这是非常错的,我甚至不会解释为什么;)


    所以是的! 你应该使用下划线前缀,它使你的代码更容易阅读,并由编译器解释! 在Xcode 4中,Apple甚至将这些@synthesize添加到默认模板中。

    通常它们用于不应在当前文件/模块/命名空间/之外访问的变量,在不支持使用private关键字等限制访问的语言中

    根据上述文档中的约定和建议,您应该在ivars前加下划线。

    不可否认,它是指为属性明确设置ivars。

    但用法是相同的,以表明ivar在任何地方的使用情况。

    然而,我对这种可能性持开放态度,在这种情况下,使用下划线前缀的ivar可以向用户发出信号,表明他们做错了什么。 同时,后固定下划线可用于纯粹的ivars,可直接访问。

    这个博客有一些经验丰富的从业者的好想法,它建议使用前缀下划线。

    如果您选择使用带前缀的下划线来装饰自己的伊娃,那么至少有一些证据表明某种装饰可以帮助您避免虫子。 前缀下划线是最常见的装饰。

    Apple保留以下划线开头的名称,用于自己的私人ivars和方法。 在任何Apple平台上的Objective-C中,建议您不要在标识符前加下划线。

      以上就是c/c++开发分享Objective C / C中的命名约定,以“_”开头?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545561.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐