我总是使用下划线。它在局部变量和实例变量之间建立了明确的区别。它还可以避免在以下情况下出现编译器警告:
@interface MyClass
{
NSString *name
}
@property (nonatomic, copy) NSString *name;
- (id) initWithName:(NSString *) name;
@end
@implementation MyClass
@synthesize name;
// The following method will result in a compiler warning
// (parameter name same as ivar name)
- (id) initWithName:(NSString *) name {
if (self = [super init]) {
self.name = name;
}
return self;
}
@end
EDIT:
在忍受了反对票并阅读了评论之后,让我尝试阐明我的观点:
Apple 建议 ivars 与其属性具有相同的名称。 Apple 还建议属性以小写字母开头。 Apple 还建议局部变量以小写字母开头。
现在你遇到了一个问题,因为当你阅读一段代码并看到正在使用一个变量时,你无法通过命名约定判断该变量是 ivar 还是局部变量。太糟糕了。解决方案是对 ivar 和局部变量采用不同的命名约定。这只是简单的常识。
您实现此命名约定的方式无关紧要。如果您确实需要,只需将“_WOOHAHA”附加到 ivar 名称即可。我不在乎(但也许其他人会在乎)。问题是,那些知道自己在做什么的人决定为 ivars 使用“下划线前缀”。恕我直言,他们做出了正确的决定,即使他们自己的公司推荐了其他东西。 (我所说的开发人员是编写一些主要 Apple 框架和 .NET Framework 类的人)
最后,代码质量比遵循甚至宣扬它的人都没有遵循的愚蠢规则更重要。
关于您所显示的代码的另一条评论:永远不要使用retain关于字符串属性。你应该使用copy反而。
有关复制/保留属性的详细信息,请参阅:
NSString 属性:复制还是保留? https://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain