3

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

// Xcode4
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window = _window;

.

// Xcode3
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window;

我知道对此的用处有不同的看法,但我只是好奇更新的模板是否在哪里:

  • (一)突出新的最佳实践。
  • (2) 展示 Apple 是如何做事的,但对你来说意味着用旧的方式做事。
  • (3) 只是个人口味,没关系。
4

1 回答 1

6

这很有趣,因为在过去(iOS 之前),Apple 曾经不鼓励对 ivars 使用下划线前缀

避免使用下划线作为前缀表示私有,尤其是在方法中。Apple 保留使用此约定。第三方使用可能会导致命名空间冲突;他们可能会在不知不觉中用自己的私有方法覆盖现有的私有方法,从而带来灾难性的后果。有关私有 API 遵循的约定的建议,请参阅“私有方法”。

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

于 2011-05-26T13:55:52.287 回答