Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?
我发现在Apple框架的头文件中,Apple名称实例变量在类接口(interface)内带有前缀underscope。 就像下面的 _delegate 实例一样:
@interface ClassName : NSObject {
id _delegate;
}
@end
但是如果我们在定义自己的实例变量时遵循这个命名约定,会有副作用吗?我已经寻找这个问题的答案很长时间了。
在苹果的代码指南中,苹果只是说他们保留以下划线开头的方法名称,他们没有提到任何关于实例变量命名问题的限制。
我的同事说,如果您定义以下划线开头的实例变量,如果您选择的名称存在于框架的私有(private)头文件中,则可能会与框架发生冲突。这是否可能,或者这是否成为我们不应该使用以下划线开头的名称的原因,因为苹果可能已经使用了它?
最佳答案
没有副作用。但是,在访问私有(private) ivars 和函数参数名称时,使用下划线可以更轻松地阅读代码。
例如,假设您的头文件中有 NSString *_name;
。
然后在您的代码中将如下所示:
- (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 Style Guide并使用 trailing underscore 。所以我的 ivars 是: NSString *name_;
关于objective-c - 使用下划线作为前缀命名实例变量在 Cocoa (Objective-C) 中是否有任何副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620658/