Objective C中,类扩展中的属性何时被添加到类中?

3
我曾认为Objective-C中的类扩展只是匿名分类。然而,你可以向这些类扩展添加属性,而在分类中是不可能的,所以我有点困惑:
#import "Money.h"

@interface Money ()
@property(nonatomic) NSUInteger amount;
@end

@implementation Money

@end

如何实现类扩展?使用分类吗?那为什么可以向其中添加iVars?类扩展是在编译时还是在加载类时添加到类中的?
1个回答

3
类扩展是一种编译器机制,允许将在@interface中声明的子集实例变量、声明属性和方法偏移至特定的翻译单元(例如从公共头文件到实现文件),从而允许头文件仅声明公共内容。从运行时的角度来看,扩展不存在:所有在类扩展中声明的内容都会合并到主要类中。这意味着扩展必须与其主要类一起编译(与类别相反),您可以从主要类和其扩展使用单个@implementation推断出这一点。它们都属于同一个类。
如您所见,类扩展与类别非常不同。类别不能声明实例变量,类别可以存在于实现主要类的不同文件中(包括在库中声明和实现的类),并且它们有自己的@ implementation。此外,类别由运行时明确加载并附加到主要类。

您介意看一下这个相关的问题吗?https://dev59.com/83PYa4cB1Zd3GeqPjn4p - cfischer
你回来了!!太好了! - jscs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接