Does naming an instance variable with underscore as a prefix have any side effects in Cocoa (Objective-C)?
Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?
我发现在Apple框架的头文件中,类接口内的apple name实例变量的前缀在作用域下。如下面的委托实例:
1 2 3 4 | @interface ClassName : NSObject { id _delegate; } @end |
但是,如果在定义自己的实例变量时遵循这个命名约定,会有什么副作用吗?我找这个问题的答案已经很久了。
在苹果的代码指南中,苹果只是说他们保留了以下划线开头的方法名,他们没有提到任何关于实例变量命名问题的限制。
我的同事说,如果您定义的实例变量以下划线开头,那么如果您选择的名称存在于框架的私有头文件中,那么它可能会与框架冲突。这是可能的,还是因为苹果可能已经使用了它,所以我们不应该使用以下划线开头的名称?
老实说,我在一个非常大的项目中用下划线命名了所有的局部私有变量,事情开始看起来像这样。这个变量萨瓦_这是节省
在我10年的编码和大项目和小项目的工作中(我做过这个,但没有做过这个)。不要这样做。这完全是浪费时间。(不好意思大喊大叫)。
我的理由是
我可能会用"uu"来表示一些非常私密的东西,我想表明这是特别的。但我绝不会使用它。
希望这能解决问题。厕所。
没有副作用。但是在访问私有的ivar和函数参数名时,使用下划线使代码的读取更加容易。
例如,假设您的头文件中有
1 2 3 4 5 | - (void)doSomethingWithName:(NSString *)name { // the underscore makes reading code easier _name = [name retain]; name = [_name retain]; // you know right away that this is wrong } |
我个人遵循google objective-c风格指南,并使用一个尾随下划线。所以我的IVARS应该是:
与john相反,我总是在局部变量前面加下划线,这是一个主要原因——它可以防止您意外地使用私有变量而不是公共变量。唯一应该访问私有变量的时间是init、dealoc和assessor方法。意外地使用一个私有变量会导致很难跟踪的错误和内存泄漏。