从iOS编程课程(cs193p fall2010)学习一些示例代码,我遇到了 sbjson框架,它通过名为SBJSON的类别扩展NSObject等。 但在+标题“NSObject + SBJSON.h”中,它读作:
@interface NSObject (NSObject_SBJSON)
NSObject_SBJSON到SBJSON的魔术映射来自哪里? 我注意到xcode在下划线之前接受了任何字符串!?
但是没有找到任何暗示。
感谢名单 克劳斯
答案 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中进行了更改/解决