objC中的类别命名约定

时间:2011-05-12 13:21:00

标签: objective-c header-files categories

从iOS编程课程(cs193p fall2010)学习一些示例代码,我遇到了 sbjson框架,它通过名为SBJSON的类别扩展NSObject等。 但在+标题“NSObject + SBJSON.h”中,它读作:

@interface NSObject (NSObject_SBJSON)

NSObject_SBJSON到SBJSON的魔术映射来自哪里? 我注意到xcode在下划线之前接受了任何字符串!?

但是没有找到任何暗示。

感谢名单  克劳斯

3 个答案:

答案 0 :(得分:6)

本身并没有真正的映射。 Objective-C类别用于向现有类添加其他方法,而无需直接访问该类的相应实现文件/详细信息。所以当你宣布像:

这样的东西时
@interface NSObject (NSObject_SBJSON)

您说您的类别会向NSObject类(以及从中派生的任何类)添加方法。括号中的“NSObject_SBJSON”部分并不重要,可以是您喜欢的任何内容(只要它不会与该对象类型的任何其他类别的名称冲突)。它甚至不需要包含“NSObject”,因此@interface NSObject (SBJSON)同样有效。

答案 1 :(得分:2)

在您的代码将像协议一样通过名称引用它们的意义上,类别未命名。在这种情况下,类别名称是Xcode(差)将文件名NSObject+SBJSON.h转换为类别名称;由于某种原因,Xcode或Objective-C的编译器不希望类别名称中有+

使用类别名称的唯一时间是匹配接口和实现。

答案 2 :(得分:0)

NSObject + SBJSON.h已经在Xcode 4.2中进行了更改/解决