2011-05-12 43 views
3

学习iOS编程课程中的一些示例代码(cs193p fall2010)我遇到了sbjson框架,它通过名为SBJSON的类别扩展NSObject等。 但在+头“的NSObject + SBJSON.h”记载为:objC中的类别命名约定

@interface NSObject (NSObject_SBJSON) 

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

但无处发现一个提示。

感谢名单 克劳斯

回答

6

本身并没有真正的映射。 Objective-C类别用于向现有类添加其他方法,而不需要直接访问该类的相应实现文件/细节。所以,当你声明是这样的:

@interface NSObject (NSObject_SBJSON) 

您是说您的分类方法,增加了对NSObject类(和它派生的任何类)。括号中的“NSObject_SBJSON”部分并不重要,并且可以是任何你喜欢的东西(只要它不与该对象类型的任何其他类别的名称相冲突)。它甚至不需要包含“NSObject”,因此具有@interface NSObject (SBJSON)将同样有效。

+0

所以,如果一个解决NSObject的+ SBJSON.h已经更改/实现两个方法,应该作出独特的类别或两点地分居的呢? – 2013-01-07 21:36:38

2

类别没有在你的代码会参考他们的名字就像一个协议的意义命名。在这种情况下,类别名称是Xcode(穷人)将文件名NSObject+SBJSON.h转换为类别名称;出于某种原因,Xcode或Objective-C的编译器不希望类别名称中包含+

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