我正在查看Ray教程,我遇到了一种对NSDictionary进行子类化的方法,这是我以前从未见过的:
第一:
@implementation NSDictionary (weather)
然后在另一个文件中:
@implementation NSDictionary (weather_package)
这似乎只是“工作”在另一个文件,其中包括它。最令人费解的是,在使用这些内容的类中定义的NSDictionary似乎与"weather_package“版本相匹配,而容器中的”weather_package“版本则与”天气“版本相匹配。
有人能告诉我这是怎么回事吗?我不完全清楚在检查代码时这是如何工作的,特别是编译器如何决定在何处应用什么,因为除了将这些文件包括在头中之外,没有显式地引用这些文件。
谢谢你的帮助。
发布于 2015-01-06 17:07:49
这不是子类。这是使用类别扩展类。这用于将新功能引入现有类,而不对它们进行子类划分。
可以为任何类声明类别,即使您没有原始实现源代码(例如标准Cocoa或Cocoa类)。在类别中声明的任何方法都将对原始类的所有实例以及原始类的任何子类可用。在运行时,由类别添加的方法与由原始类实现的方法没有区别。
一个类别可以定义如下
@interface ClassName (CategoryName)
@end
@implementation ClassName (CategoryName)
@end
欲了解更多信息,请阅读编号/doc/uid/SW1 40011210-CH6-SW1
发布于 2015-01-06 17:07:51
https://stackoverflow.com/questions/27803537
复制相似问题