我正在看Ray Wenderlich AFNetworking tutorial,我遇到了一种我以前没见过的NSDictionary子类化方式:
第一
@implementation NSDictionary (weather)
然后在另一个文件中:
@implementation NSDictionary (weather_package)
这似乎只是“工作”在另一个包含它的文件中。最令人费解的是,在使用这些版本的类中定义的NSDictionary似乎与“weather_package”版本匹配,并且在该容器中匹配“天气”版本。
有人能指出我这里发生的事情的名字吗?我并不完全清楚这是如何通过查看代码来实现的,特别是编译器如何决定应用什么,因为除了在头文件中包含它们之外,没有明确引用这些文件。
感谢您的帮助。
答案 0 :(得分:2)
这不是子类化。这是使用类别扩展类。这用于将新功能引入现有类而无需对其进行子类化。
即使您没有原始实现源代码(例如标准Cocoa或Cocoa Touch类),也可以为任何类声明类别。您在类别中声明的任何方法都可用于原始类的所有实例,以及原始类的任何子类。在运行时,类别添加的方法与原始类实现的方法没有区别。
类别可以定义为
@interface ClassName (CategoryName)
@end
@implementation ClassName (CategoryName)
@end
答案 1 :(得分:1)