我注意到,使用Xcode4 Apple已经更新了应用程序模板,以便在实例变量之前包含下划线。
// Xcode4
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window = _window;
// Xcode3
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window;
我知道usefulness对此有不同的看法,但我很好奇,如果更新的模板在哪里:
答案 0 :(得分:6)
这很有趣,因为在过去(iOS之前),Apple曾经discourage the use of underscore prefixes for ivars:
避免使用下划线字符作为私有的前缀,尤其是在方法中。 Apple保留使用此约定。第三方使用可能导致名称空间冲突;他们可能会无意中用自己的方法覆盖现有的私有方法,带来灾难性的后果。有关私有API遵循的约定的建议,请参阅“私有方法”。
但是使用现代的Objective-C运行时,我相信子类中的ivar命名冲突已经消除,所以这不再是问题了。所以我认为这就是为什么他们默认使模板使用下划线前缀,以匹配Apple内部代码的样子。