问题描述
|
我注意到,Apple已使用Xcode4更新了应用程序模板,以在实例变量之前包含下划线。
// Xcode4
@property (nonatomic,retain) IBOutlet UIWindow *window;
@synthesize window = _window;
。
// Xcode3
@property (nonatomic,retain) IBOutlet UIWindow *window;
@synthesize window;
我知道对于此方法的用途有不同的看法,但我只是好奇更新的模板是否位于:
(1)突出新的最佳实践。
(2)展示Apple的工作方式,但对您来说意味着用旧的方式做事。
(3)它只是个人品味,没关系。
解决方法
这很有趣,因为在过去(iOS之前),Apple一直不鼓励在下划线中使用下划线前缀:
避免使用下划线字符作为表示私有的前缀,尤其是在方法中。苹果保留使用此约定。第三方使用可能会导致名称空间冲突;他们可能会不知不觉地用自己的方法覆盖现有的私有方法,从而造成灾难性的后果。有关私有API遵循的约定的建议,请参见“私有方法”。
但是,对于现代的Objective-C运行时,我相信子类中的ivar命名冲突已被消除,因此这不再是问题。因此,我认为这就是为什么他们在默认情况下使模板使用下划线前缀来匹配Apple内部代码的原因。