像这样子类化 NSDictionary:@implementation NSDictionary (weather)
subclassing NSDictionary like so: @implementation NSDictionary (weather)
我正在查看 Ray Wenderlich AFNetworking tutorial,我发现了一种我以前从未见过的 subclassing NSDictionary 的方法:
第一个:
@implementation NSDictionary (weather)
然后在另一个文件中:
@implementation NSDictionary (weather_package)
这似乎只是 "work" 在包含它的另一个文件中。最令人费解的是,在使用这些的 class 中定义的 NSDictionary 似乎与 "weather_package" 版本匹配,并且在该容器中与 "weather" 版本匹配。
有人可以告诉我这里发生的事情的名称吗?通过查看代码,我并不完全清楚这是如何工作的,特别是编译器如何决定在何处应用什么,因为除了将它们包含在 header.
之外,没有对这些文件进行明确引用。
感谢您的帮助。
这不是子classing。这是使用类别扩展 class。这用于将新功能引入现有的 classes 而无需子 classing 它们。
可以为任何 class 声明类别,即使您没有原始实现源代码(例如标准 Cocoa 或 Cocoa Touch classes)。您在类别中声明的任何方法都将可用于原始 class 的所有实例,以及原始 class 的任何子class。在运行时,类别添加的方法与原始class实现的方法没有区别class。
类别可以这样定义
@interface ClassName (CategoryName)
@end
@implementation ClassName (CategoryName)
@end
它不是子类化,它更多的是使用新方法扩展现有实现,即所谓的类别:
我正在查看 Ray Wenderlich AFNetworking tutorial,我发现了一种我以前从未见过的 subclassing NSDictionary 的方法:
第一个:
@implementation NSDictionary (weather)
然后在另一个文件中:
@implementation NSDictionary (weather_package)
这似乎只是 "work" 在包含它的另一个文件中。最令人费解的是,在使用这些的 class 中定义的 NSDictionary 似乎与 "weather_package" 版本匹配,并且在该容器中与 "weather" 版本匹配。
有人可以告诉我这里发生的事情的名称吗?通过查看代码,我并不完全清楚这是如何工作的,特别是编译器如何决定在何处应用什么,因为除了将它们包含在 header.
之外,没有对这些文件进行明确引用。感谢您的帮助。
这不是子classing。这是使用类别扩展 class。这用于将新功能引入现有的 classes 而无需子 classing 它们。
可以为任何 class 声明类别,即使您没有原始实现源代码(例如标准 Cocoa 或 Cocoa Touch classes)。您在类别中声明的任何方法都将可用于原始 class 的所有实例,以及原始 class 的任何子class。在运行时,类别添加的方法与原始class实现的方法没有区别class。
类别可以这样定义
@interface ClassName (CategoryName)
@end
@implementation ClassName (CategoryName)
@end
它不是子类化,它更多的是使用新方法扩展现有实现,即所谓的类别: