苹果

我见过很多的.h(私人API的)。大多数变量/结构/枚举/类的具有_前缀。

#import <Foundation/NSValue.h>
#import <Foundation/NSObjCRuntime.h>

@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

我的问题是,

什么是背后给予强调和适当一个再次的typedef他们的理由?

有帮助吗?

解决方案

目标-C有一个全局开放名字空间。所有名称是唯一的这一点很重要。除了前面所述的原因,苹果公司保留所有下划线名字本身。这将有助于防止意外的名称冲突。

其他提示

它通常用作标志所讨论的实体是私有和/或内部,不应该在代码中直接使用。我认为,在旧版本的C你不能声明匿名结构,所以你需要一个“填充物”的名字放在那里。

我相信这是为了创造一个不透明类型。这限制的类型的客户端访问内部细节而不使用所提供的接口。然后,您可以通过不透明指针使用结构,并且可以声明数组变量等不用担心内部实现,以确保该软件的类型不会需要重新编译,如果苹果决定改变这种类型后面的代码。

有关声明结构,宣告typedef struct _name {...} name的风格又回到了GCC 2.0左右的日子里,如上面提到的时候,你不能有一个匿名结构。

有关实例变量的名称,单前导下划线是苹果内部的编码规范,并正式说苹果公司保留与单下划线开头的所有姓名。如果苹果的名字他们所有的ivars这样,那么你不会有任何自己的名字的冲突,如果你不这样做。

不幸的是,许多示例代码项目已经公布了苹果的开发者网站,无需通过代码去和伊娃名字去除前导下划线。出现这种情况有两个原因,其中最主要的是开发苹果的内部工作是在命名他们的变量这样的习惯,而另一个原因是人们审查示例代码项目还没有真正关心太多关于强制执行的标准编码样式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top