我见过许多苹果的.h(私人API)。大多数变量/结构/枚举/类都有_作为前缀。
#import <Foundation/NSValue.h>
#import <Foundation/NSObjCRuntime.h>
@class NSString;
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
我的问题是,
给予下划线和背后的原因是什么?用适当的方法再次输入它们吗?
答案 0 :(得分:7)
Objective-C有一个全局开放的名称空间。所有名字都必须是独一无二的。除了之前给出的原因,Apple还为自己保留了所有下划线名称。这有助于防止意外名称冲突。
答案 1 :(得分:2)
它通常用作有问题的实体是私有和/或内部的标志,不应直接在您的代码中使用。我认为在旧版本的C中你不能声明一个匿名结构,所以你需要一个“填充”名称放在那里。
答案 2 :(得分:1)
我认为这是为了创建一个opaque type。这会限制该类型的客户端访问内部详细信息,而无需使用提供的接口。然后,您可以通过opaque pointer使用该结构,并且可以声明该类型的数组,变量等,而无需担心内部实现,确保在Apple决定更改后面的代码时不需要重新编译软件这样的类型。
答案 3 :(得分:1)
对于声明结构,声明typedef struct _name {...} name
的样式可以追溯到GCC 2.0左右的时代,如上所述,你不可能有一个匿名结构。
对于ivars的名称,单个前导下划线是Apple内部编码约定,正式说苹果保留所有以单下划线开头的名称。如果Apple以这种方式命名他们所有的ivars,那么如果你不这样做,你就不会与他们的任何名字发生冲突。
不幸的是,许多示例代码项目已经发布在Apple的开发人员网站上,而没有通过代码并删除了ivar名称的主要下划线。出现这种情况有两个原因,主要原因是在Apple内部工作的开发人员习惯以这种方式命名变量,另一个原因是审查示例代码项目的人员并没有真正关心执行标准编码样式。