协议与分类
第23条:通过委托与数据源协议进行对象间通信
- 如果有必要,可以实现含有
位段
的结构体,将委托对象能否响应相关协议方法这一信息缓存其中。
第24条:使用分类来分散代码
- 使用分类将类的实现代码划分为易于管理的小块
- 将视为“私有”的方法归入叫
Private
的分类中,隐藏实现细节。
第25条:为第三方分类添加前缀
- 向第三方类中添加分类时,应该给其名称、方法名添加专用的前缀。
第26条:不要在分类中添加属性
- 尽量不要在分类中添加属性,因为属性是为了封装数据的。而分类目的在于扩展类的功能,而非封装数据。
- 虽然这样定义,但是也可以在分类当中创建只读属性。
1 | @interface NSCalendar (EOCCalandar) |
第27条:使用匿名分类(或者说称为扩展)来隐藏实现细节
- 通过匿名分类,把私有的方法、属性声明在匿名分类中。
- 若某属性在主接口中声明为 “readonly”,类内部又要用设置方法修改此属性,可以在匿名分类中将其扩展为 “readwrite”。
第28条:通过协议提供匿名对象
- 提供协议来隐藏具体类内部的实现。
- 具体的对象类型可以淡化为遵从某协议的
id
类型,协议里规定了对象所应该实现的方法,可以使用匿名对象来表示。