面试题答案
一键面试1. 隐式声明机制
- 在Objective - C中,类扩展(Extension)是在.m文件中对类进行扩展的一种方式。它隐式声明机制体现在:
- 类扩展在编译时被编译器处理,不需要像分类(Category)那样在运行时动态加载。它就像是类定义的一部分,在类的实现文件(.m)中,为类添加额外的属性、方法声明等。虽然没有像常规类定义那样显式的实现,但编译器会将这些声明当作类本身的一部分进行处理。
- 例如,假设有一个
Person
类,在Person.m
文件中定义类扩展:
@interface Person ()
@property (nonatomic, strong) NSString *secretInfo;
- (void)privateMethod;
@end
这里声明的secretInfo
属性和privateMethod
方法,就如同在类的原始定义中声明的一样,编译器在编译Person.m
文件时,会将这些声明整合到类的结构中,不需要额外的操作来使类“知晓”这些扩展内容。
2. 使用场景
- 封装私有属性和方法:
- 可以将不想暴露给外部的属性和方法通过类扩展声明在
.m
文件中。这样,在类的外部无法直接访问这些私有内容,提高了代码的封装性。例如上述Person
类的secretInfo
属性和privateMethod
方法,只能在Person.m
文件内部的方法实现中使用,类的使用者无法直接访问它们。
- 可以将不想暴露给外部的属性和方法通过类扩展声明在
- 为类添加临时方法:
- 当在某个特定的实现文件中,需要为类添加一些临时使用的方法时,使用类扩展很方便。比如在处理某个特定业务逻辑时,只在当前
.m
文件中有需求,不需要将这些方法暴露给整个项目其他地方使用,就可以通过类扩展声明并实现这些方法。
- 当在某个特定的实现文件中,需要为类添加一些临时使用的方法时,使用类扩展很方便。比如在处理某个特定业务逻辑时,只在当前
- 增强类的内部功能:
- 在类的实现过程中,如果发现需要为类增加一些功能,且这些功能只在类的内部实现中有意义,不适合暴露给外部调用,使用类扩展可以很好地满足这个需求。例如,在一个复杂的视图控制器类中,为了实现一些视图布局的辅助逻辑,可以通过类扩展添加相关的私有方法来完成这些内部功能。