Objective c 类扩展中的属性何时添加到目标C中的类?
我的印象是,Objective C中的类扩展只是匿名类别。但是,您可以向这些类扩展添加属性,这在类别中是不可能的,因此我有点困惑:Objective c 类扩展中的属性何时添加到目标C中的类?,objective-c,cocoa,categories,class-extensions,ivars,Objective C,Cocoa,Categories,Class Extensions,Ivars,我的印象是,Objective C中的类扩展只是匿名类别。但是,您可以向这些类扩展添加属性,这在类别中是不可能的,因此我有点困惑: #import "Money.h" @interface Money () @property(nonatomic) NSUInteger amount; @end @implementation Money @end 类扩展是如何实现的?作为类别?那么,为什么允许您在其中添加IVAR?类扩展是什么时候添加到类中的,是在编译时还是在加载类时?类扩展是一种编译
#import "Money.h"
@interface Money ()
@property(nonatomic) NSUInteger amount;
@end
@implementation Money
@end
类扩展是如何实现的?作为类别?那么,为什么允许您在其中添加IVAR?类扩展是什么时候添加到类中的,是在编译时还是在加载类时?类扩展是一种编译器机制,允许将
@interface
中声明的实例变量、声明的属性和方法的子集偏移到特定的转换单元(例如,从公共头文件到实现文件),从而允许头文件仅声明应该是公共的内容。从运行时的角度来看,扩展不存在:类扩展中声明的所有内容都合并到主体类中。这意味着扩展必须沿其主体类进行编译(与categories相反),您可以从这样一个事实中推断出来,即主类及其扩展都有一个@implementation
。它都是同一个类的一部分
正如您所看到的,类扩展与类别有很大的不同。类别不能声明实例变量,类别可以驻留在与实现主体类的实现文件不同的实现文件中(包括在库中声明和实现的类)它们有自己的
@实现
。此外,运行时会显式加载类别并将其附加到主类。谢谢,现在有意义了。:-)您介意看看这个相关问题吗?您回来了!!这太棒了!