在Objective-C中,下划线前缀的variables名是什么意思?

我注意到,在许多社区的Objective-C类和Apple的框架中,它们使用一个以下划线作为variables前缀的约定来命名一些variables,例如: _name 。 有下划线的原因是什么? 我应该在自己的课上做这个吗? 如果是的话,我应该何时何地使用它?

在cocoa,这是一个公约,表明什么是私人的,不应该在外部使用。 然而,这是非官方的惯例,特别是在文件中这样的措词:

以“_”开头的单个下划线字符的方法名称保留供Apple使用。

但是,该build议特别适用于方法,而不是variables。 所以,如果你想用下划线为你的variables加上前缀,就直接前进。 这就是说,如果你使用下划线前缀来表示一些数据的私有性质,也许你不应该把它暴露在第一位…

这就是所谓的丑化。 关键是你永远不会使用它,所以你创build的variables名或者#define都不能干涉苹果的代码。

具有讽刺意味的是,许多人用这样的名字创build标题守卫,因为他们看到了系统标题。

来自C99 7.1.3“保留标识符”:

所有以下划线和大写字母或其他下划线开头的标识符总是保留用于任何用途。

(它们是为系统库保留的。)

注意:我不确定C99和Apple ObjC之间的确切关系,但是您也可以使用在整个C语言系列中都可以使用的命名约定。 特别是ObjC ++将需要有效的C ++名称,这些名称在任何地方都不需要双下划线。

下划线妨碍了可读性。 同样用LLVM代替GCC,我摆脱了header side ivars和header的属性。 一定要使你的属性不是primefaces的,除非你真的想读取和写入同步的线程安全。 除非你指定非primefaces,否则它将默认为primefaces – 这将剥夺你的一些性能。

也按照惯例,从来没有开始访问者获取。 setter应该从set开始,但get getters没有get。 阅读关于KVO和KVC的更多关于公约和它们的优点。

我不喜欢枚举命名列表中的下划线。 在这里,下划线帮助我选出所有以相同的词干开头的5行或更多行的后缀。 像typedef NSInteger COMPASS_DIRECTION; 枚举{COMPASS_DIRECTION_NORTH,COMPASS_DIRECTION_EAST,COMPASS_DIRECTION_SOUTH,COMPASS_DIRECTION_WEST,};

Interesting Posts