Objective-C 中的复合对象与预处理器
一、协议相关知识
在 Objective-C 里,协议分为正式协议和非正式协议。编译器对非正式协议并无帮助,不存在一致性检查或测试的概念。而当对象采用正式协议时,它必须遵循协议里所有必需的消息,这种一致性在编译时和运行时都能得到强制检查。若对象采用非正式协议,依据协议的不同,它或许无需采用协议中的所有方法,其一致性只能在运行时(通过 respondsToSelector: )进行强制检查,编译时则无法实现。
需要注意的是,Objective-C 2.0 语言中新增的 @optional 指令旨在取代非正式协议的使用,在一些 UIKit 类中就能看到这种应用。
二、复合对象
我们可以通过多种方式扩展类的定义,比如子类化和使用类别。另外,还能定义一个包含其他类对象的类,这种新类的对象就被称作复合对象。
以之前定义的 Square 类为例,在“继承”章节中,我们把它定义为 Rectangle 的子类,因为正方形其实就是边长相等的矩形。不过,子类化存在一些弊端。子类会继承父类的所有实例变量和方法,可有些父类方法对某些子类并不适用。例如, Rectangle 的 setWidth:andHeight: 方法虽能被 Square 类继承,但实际上并不适用于正方形。而且,创建子类时,必须确保所有继承的方法都能正常工作,因为类的使用者可以访问这些方法。此外,子类依赖于父类,父类的改动可能会意外导致子
超级会员免费看
订阅专栏 解锁全文
25

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



