Xcode4模板现在在iVars上使用下划线?

fuz*_*oat 3 iphone cocoa-touch objective-c xcode3to4

我注意到,使用Xcode4 Apple更新了应用程序模板,以在实例变量之前包含下划线.

// Xcode4
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window = _window;
Run Code Online (Sandbox Code Playgroud)

.

// Xcode3
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window;
Run Code Online (Sandbox Code Playgroud)

我知道对于这方面的用处有不同的意见,但我只是好奇如果更新的模板在哪里:

  • (1)突出新的最佳实践.
  • (2)展示Apple如何处理事情,但显示出以旧方式执行的意义.
  • (3)它只是个人品味,没关系.

Dan*_*son 6

这很有趣,因为在过去(iOS之前),Apple过去常常不鼓励使用下划线前缀来制作ivars:

避免使用下划线字符作为私有的前缀,特别是在方法中.Apple保留使用此约定.第三方使用可能导致名称空间冲突; 他们可能会无意中用自己的方法覆盖现有的私有方法,带来灾难性的后果.有关私有API遵循的约定的建议,请参阅"私有方法".

但是使用现代的Objective-C运行时,我相信子类中的ivar命名冲突已经消除,所以这不再是问题了.所以我认为这就是为什么他们默认使模板使用下划线前缀来匹配Apple的内部代码.