【问题标题】:Preferred way to name instance variable in Objective C [duplicate]在Objective C中命名实例变量的首选方法[重复]
【发布时间】:2011-08-06 11:47:40
【问题描述】:

可能重复:
When do you make an underscore in front of an instance variable?

在 Objective C 中,实例变量默认是受保护的,你喜欢怎样命名它?

假设你有一个变量名,以下3种方式都有它们的支持者。

  1. _foo
  2. foo_

【问题讨论】:

标签: iphone objective-c


【解决方案1】:

富。我一直鄙视 _foo 或 foo_ 样式。

【讨论】:

  • +1000。这让我抓狂。
  • 我也不喜欢使用“”,但它确实提倡使用访问器(您看不到“”)。尽管如此,我还是投票给你,因为它很丑。
【解决方案2】:

Apple 的Coding Guidelines for Cocoa 建议您避免使用下划线前缀:

避免使用下划线 字符作为前缀,表示私有, 尤其是在方法上。苹果储备 本公约的使用。使用人 第三方可能导致 名称空间冲突;他们可能 不知不觉地覆盖了现有的 使用自己的私有方法, 带来灾难性的后果。

而且由于我不知道任何尾随下划线约定,我不知道你为什么不应该只使用 foo。

【讨论】:

  • 后面有一个下划线约定。谷歌在他们的指南中推荐它,have a look here
  • 我只想指出,Google 现在在下划线约定方面遵循 Apple 的样式指南。
【解决方案3】:

根据_foo,您不应该使用下划线作为前缀 - 这是为 Apple 保留的(防止您意外重新定义您不知道的变量!)

我喜欢foo_,但前提是您要编写访问器。否则我只使用foo。但是,对于单独使用内存,最好始终使用访问器并在实现中将不希望公开的访问器声明为私有类别,如下所示:

@interface MyClass ()
@property (nonatomic, retain) NSArray *myArray;
@end

@implementation
@synthesize myArray = myArray_;
@synthesize myPublicString = myPublicString_;

- (void) dealloc
{
   [myArray_ release]; myArray_ = nil;
   [myPublicString_ release]; myPublicString_ = nil;
}

....

@end

【讨论】:

  • 我不喜欢这种方式,直到我开始为一家在其代码风格指南中使用这种风格的公司工作。我已经习惯了,现在甚至有点喜欢它。
  • 我也不太喜欢使用“_”,但我确实喜欢通过始终使用访问器来避免内存问题。对我来说,更好的内存管理的实用性覆盖了使用“-”的丑陋(除了在 dealloc 中你几乎看不到)。
【解决方案4】:

一般来说,为什么有人会用任何后缀或前缀来命名他们的私有变量,大多数现代工具无论如何都可以很好地为它们着色。我更喜欢简单的 foo。

【讨论】:

    【解决方案5】:

    由于我似乎是少数,为了平衡,我会继续投入我的两分钱:

    我喜欢下划线的变体。我认为它使代码语义一目了然。当然,语法高亮也可以做到这一点,但我一直更喜欢 IDE/主题独立的方法。习惯了,让小家伙立马在你的脑海里触发“直接访问这里的ivar”警报就好了。

    显然,这是非常主观的。

    作为附录,下划线前缀实际上只对方法名称特别危险,编译器不会立即暴露冲突,但如果你是下划线粉丝,最好还是使用后缀.

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 2014-09-16
      • 2013-08-18
      • 2012-11-12
      • 1970-01-01
      • 2011-09-24
      • 2011-10-16
      • 2013-02-02
      • 2023-04-04
      相关资源
      最近更新 更多