面试题答案
一键面试匿名类别声明
在Objective-C中,匿名类别(未命名分类)的声明方式是在类名后使用()
,且不包含分类名称,例如:
@interface SomeClass ()
// 在此声明方法
- (void)privateMethod;
@end
与普通类别的区别
- 名称:普通类别有名称,在
()
中指定;匿名类别无名称。 - 方法访问控制:普通类别通常用于给类添加公共方法;匿名类别一般用于声明私有方法,这些方法只在实现文件(
.m
)中可见和可用。 - 属性添加:普通类别可以声明属性,但需要通过关联对象实现属性的存储;匿名类别可以声明属性,并且如果在实现文件中合成属性,编译器会自动生成实例变量来存储属性值。
实际应用特点
- 隐藏实现细节:将一些只在类内部使用的方法放到匿名类别中,使接口更简洁,隐藏实现细节,增强封装性。
- 方便代码组织:将相关功能的私有方法分组到匿名类别中,使代码结构更清晰。
限制
- 不能添加实例变量:匿名类别不能直接添加实例变量。虽然可通过关联对象模拟添加实例变量的效果,但与直接添加实例变量有本质区别。
- 方法名冲突:如果匿名类别中声明的方法与类本身或其他类别中的方法名冲突,会导致编译错误或运行时方法覆盖,使程序行为不可预测。