子类化NSDictionary如下:@implementation NSDictionary(weather)

时间:2015-01-06 17:02:55

标签: ios objective-c subclass

我正在看Ray Wenderlich AFNetworking tutorial,我遇到了一种我以前没见过的NSDictionary子类化方式:

第一

@implementation NSDictionary (weather)

然后在另一个文件中:

@implementation NSDictionary (weather_package)

这似乎只是“工作”在另一个包含它的文件中。最令人费解的是,在使用这些版本的类中定义的NSDictionary似乎与“weather_package”版本匹配,并且在该容器中匹配“天气”版本。

有人能指出我这里发生的事情的名字吗?我并不完全清楚这是如何通过查看代码来实现的,特别是编译器如何决定应用什么,因为除了在头文件中包含它们之外,没有明确引用这些文件。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

这不是子类化。这是使用类别扩展类。这用于将新功能引入现有类而无需对其进行子类化。

即使您没有原始实现源代码(例如标准Cocoa或Cocoa Touch类),也可以为任何类声明类别。您在类别中声明的任何方法都可用于原始类的所有实例,以及原始类的任何子类。在运行时,类别添加的方法与原始类实现的方法没有区别。

类别可以定义为

@interface ClassName (CategoryName)

@end

@implementation ClassName (CategoryName)

@end

有关详细信息,请参阅https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW1

答案 1 :(得分:1)