使用类别有哪些优缺点?为什么以及何时需要它们?

Mat*_*rix 4 objective-c

使用类别有哪些优缺点?为什么以及何时需要它们?

Dir*_*irk 6

好处:

  • 您可以扩展您没有源的任何类,甚至是那些类.例如,查看Apple添加到NSString类中的UI扩展以进行呈现,获取指标等.

  • 由于您可以访问所有实例变量,因此类别为您提供了一种使用逻辑分组在编译单元之间构建代码的好方法,而不是像Java那样采用"它必须都在一个物理位置"的方法.

缺点:

  • 您无法安全地覆盖已由类本身或其他类别定义的方法.

AFAIK,如果您尝试以下方式,语言无法保证实际调用哪个实现:

@interface Foo { }
- (void) method;
@end

@interface Foo (MyCategory)
- (void) method;
@end
Run Code Online (Sandbox Code Playgroud)