Ios Objective-C中带下划线前缀的变量名是什么意思?

Ios Objective-C中带下划线前缀的变量名是什么意思?,ios,objective-c,cocoa,naming,conventions,Ios,Objective C,Cocoa,Naming,Conventions,我注意到,在许多community Objective-C类和Apple的框架中,它们使用在变量前面加下划线的约定来命名一些变量,例如:\u name。有下划线的原因是什么。我应该在自己的课堂上做这个吗?如果是这样的话,我应该在何时何地使用它?这就是所谓的丑化。关键是你从来不使用它,所以你创建的变量名或定义都不会干扰苹果的代码 具有讽刺意味的是,许多人使用这样的名称创建标题保护,因为他们看到系统标题会这样做 从C99 7.1.3“保留标识符”: 所有以下划线和大写字母或其他下划线开头的标识符始终

我注意到,在许多community Objective-C类和Apple的框架中,它们使用在变量前面加下划线的约定来命名一些变量,例如:
\u name
。有下划线的原因是什么。我应该在自己的课堂上做这个吗?如果是这样的话,我应该在何时何地使用它?

这就是所谓的丑化。关键是你从来不使用它,所以你创建的变量名或定义都不会干扰苹果的代码

具有讽刺意味的是,许多人使用这样的名称创建标题保护,因为他们看到系统标题会这样做

从C99 7.1.3“保留标识符”:

所有以下划线和大写字母或其他下划线开头的标识符始终保留供任何使用

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


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

< P>在可可中,这是一种约定,表示某事物是私有的,不应该被外部使用。然而,这是一种非官方的惯例,特别是考虑到以下措辞:

方法名以“\u1”(一个下划线字符)开头,保留供Apple使用


然而,该建议特别适用于方法,而不是变量。因此,如果您想在变量前面加下划线,请直接使用。这就是说,如果您使用下划线前缀来表示某些数据的私有性质,那么首先可能不应该公开这些数据…

下划线会妨碍可读性。同样,使用LLVM代替GCC,我摆脱了头端IVAR,并使用了头端属性。确保属性是非原子的,除非为了线程安全而确实需要同步读写。除非您指定非原子,否则它将默认为原子-这将剥夺您的一些性能

按照惯例,永远不要用get启动访问器。setter应该以set开头,但getter不能以get开头。阅读KVO和KVC,了解更多关于约定及其优点的信息

但我确实喜欢枚举命名列表中的下划线。这里的下划线帮助我在5行或更多行中选择后缀,所有行都以相同的词干开头。 喜欢 typedef NSInteger罗盘方向; 枚举{ 指南针北向, 指南针向东, 指南针,指南针,指南针, 指南针西向,
};

我不确定我是否理解,如果我在写我自己的类,我应该丑化一些我不打算在子类上访问的变量吗?或者,这应该是苹果代码唯一的东西吗?所以基本上它只是为了避免变量名称运行到另一个?@亚历克斯:你可以选择自己的UpLIFIFATE语法,但初始下划线资本和下划线下划线(和C++也保留双下划线的任何地方)的名称是为系统保留。这适用于所有平台;这是一种语言特征。