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

发布于 2024-11-10 01:14:42 字数 557 浏览 0 评论 0原文

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

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

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

我知道对于有用性存在不同意见但我只是好奇更新后的模板是否:

  • (1) 突出显示新的最佳实践。
  • (2) 展示苹果是如何做事的,但意思是让你用老方法做事。
  • (3)这只是个人口味,无所谓。

I have noticed that with Xcode4 Apple has updated the application templates to include underscores before instance variables.

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

.

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

I know there are differing opinions on the usefulness of this but I was just curious if the updated templates where:

  • (1) Highlighting a new best practice.
  • (2) Showing how Apple does things but meaning for you to do it the old way.
  • (3) Its just personal taste, it does not matter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃素的狼 2024-11-17 01:14:42

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

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

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

It's interesting because in the past (pre-iOS), Apple used to discourage the use of underscore prefixes for ivars:

Avoid the use of the underscore character as a prefix meaning private, especially in methods. Apple reserves the use of this convention. Use by third parties could result in name-space collisions; they might unwittingly override an existing private method with one of their own, with disastrous consequences. See “Private Methods” for suggestions on conventions to follow for private API.

But with a modern Objective-C runtime, I believe ivar naming conflicts in subclasses has been eliminated, so this is not a problem anymore. So I think that's why they're making the templates use an underscore prefix by default, to match what Apple's internal code looks like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文