MST
星途 面试题库

面试题:Objective-C中类别(Category)与扩展(Extension)的基本区别

请阐述Objective-C中类别(Category)与扩展(Extension)在定义方式、作用范围、可添加内容等方面的基本区别。
49.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

定义方式

  • 类别(Category):在 .h 文件中声明,使用 @interface 类名 (类别名) 形式,在 .m 文件中实现。例如:
// 声明
@interface NSString (MyCategory)
- (NSString *)customMethod;
@end

// 实现
@implementation NSString (MyCategory)
- (NSString *)customMethod {
    return @"Custom String";
}
@end
  • 扩展(Extension):通常声明在类的 .m 文件中,形式为 @interface 类名 (),一般没有实现部分,因为扩展添加的方法由类本身实现。例如:
// 在类的.m文件中声明扩展
@interface MyClass ()
@property (nonatomic, strong) NSString *privateProperty;
- (void)privateMethod;
@end

作用范围

  • 类别(Category):可在不改变类原有代码的情况下,为现有的类添加新方法,甚至可以为系统类添加方法,作用范围较广。不同的类别可以在不同的源文件中定义,只要在使用类别方法前引入对应的头文件即可。
  • 扩展(Extension):主要用于为类添加私有的属性和方法,作用范围主要在类的实现文件(.m)内,对类的使用者隐藏这些新增的内容。

可添加内容

  • 类别(Category):主要用于添加方法,不能添加实例变量。如果需要添加类似实例变量的功能,可以使用关联对象(Associated Objects)。
  • 扩展(Extension):既可以添加属性(编译器会自动合成属性的存取方法),也可以添加方法。扩展添加的属性和方法默认是私有的,只能在类的实现文件中访问。