【发布时间】:2011-08-06 11:47:40
【问题描述】:
可能重复:
When do you make an underscore in front of an instance variable?
在 Objective C 中,实例变量默认是受保护的,你喜欢怎样命名它?
假设你有一个变量名,以下3种方式都有它们的支持者。
- _foo
- foo_
- 富
【问题讨论】:
标签: iphone objective-c
可能重复:
When do you make an underscore in front of an instance variable?
在 Objective C 中,实例变量默认是受保护的,你喜欢怎样命名它?
假设你有一个变量名,以下3种方式都有它们的支持者。
【问题讨论】:
标签: iphone objective-c
富。我一直鄙视 _foo 或 foo_ 样式。
【讨论】:
Apple 的Coding Guidelines for Cocoa 建议您避免使用下划线前缀:
避免使用下划线 字符作为前缀,表示私有, 尤其是在方法上。苹果储备 本公约的使用。使用人 第三方可能导致 名称空间冲突;他们可能 不知不觉地覆盖了现有的 使用自己的私有方法, 带来灾难性的后果。
而且由于我不知道任何尾随下划线约定,我不知道你为什么不应该只使用 foo。
【讨论】:
根据_foo,您不应该使用下划线作为前缀 - 这是为 Apple 保留的(防止您意外重新定义您不知道的变量!)
我喜欢foo_,但前提是您要编写访问器。否则我只使用foo。但是,对于单独使用内存,最好始终使用访问器并在实现中将不希望公开的访问器声明为私有类别,如下所示:
@interface MyClass ()
@property (nonatomic, retain) NSArray *myArray;
@end
@implementation
@synthesize myArray = myArray_;
@synthesize myPublicString = myPublicString_;
- (void) dealloc
{
[myArray_ release]; myArray_ = nil;
[myPublicString_ release]; myPublicString_ = nil;
}
....
@end
【讨论】:
一般来说,为什么有人会用任何后缀或前缀来命名他们的私有变量,大多数现代工具无论如何都可以很好地为它们着色。我更喜欢简单的 foo。
【讨论】:
由于我似乎是少数,为了平衡,我会继续投入我的两分钱:
我喜欢下划线的变体。我认为它使代码语义一目了然。当然,语法高亮也可以做到这一点,但我一直更喜欢 IDE/主题独立的方法。习惯了,让小家伙立马在你的脑海里触发“直接访问这里的ivar”警报就好了。
显然,这是非常主观的。
作为附录,下划线前缀实际上只对方法名称特别危险,编译器不会立即暴露冲突,但如果你是下划线粉丝,最好还是使用后缀.
【讨论】: