Objective-C 高级特性与宏的使用
1. NSObject 类的特性
NSObject 是一个“特殊类”,它为运行时提供了其他类所没有的特定功能。从类对象本身而非类定义的角度来说,NSObject 类能够调用对象方法,这是 Objective-C 中唯一能做到这一点的类。为了实现这一功能,NSObject 对 self 对象进行了一些特殊处理。因此,在 NSObject 的类别上下文中使用 self 时,它既可以指类,也可以指对象。
由于这些特性带来的潜在风险,一般而言,应该仅以接口的形式在 NSObject 上声明类别,而不提供实现。类别实现可能应限制在子类中。尽管可以为 NSObject 类别提供实现,但在大多数情况下,NSObject 上的类别仅用于声明非正式协议。
2. 使用匿名类别扩展类
虽然 Objective-C 在类声明语法中没有内置声明私有方法的机制,但可以使用类别来定义一个仅向类的特权用户暴露,而不向其他用户暴露的私有 API。实现这一目的的工具称为匿名类别。本质上,匿名类别是在给定类上声明的没有名称的类别。也就是说,在声明类别时,括号内为空,而不是像普通类别那样在括号内放置类别名称。
使用匿名类别时,只声明接口,而不将实现作为类别本身的一部分。通常,将这个类别声明放在另一个头文件中,供有权访问私有 API 的类用户导入。实现则在原始类的实现中完成,这样只是创建了一种从外部访问该实现的机制。
以下是一个匿名类别声明的示例:
// Foo+PrivateMethods.h
#import <Foundatio
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



