delegate的优势:
1.因为有严格的语法,所以编译器能帮你检查是否实现了所有应该实现的方法,不容易遗忘和出错
2.使用delegate的时候,逻辑很清楚,比较方便的定位错误代码
3.能够反馈返回值
delegate的缺点:
只能1对1
notification的优势:
一个对象发出的通知,多个对象能进行反应,一对多的方式实现很简单
缺点:
通知发出后,发出通知的对象不能从观察者获得任何反馈。
KVO的优缺点。
优点:
1.提供一个简单地方法来实现两个对象的同步
2.能够提供观察的属性的最新值和先前值
3.用keypaths 来观察属性,因此也可以观察嵌套对象
缺点:
1.观察的属性必须使用string来定义,因此编译器不会出现警告和检查
2.对属性的重构将导致观察不可用
3.复杂的“if”语句要求对象正在观察多个值,这是因为所有的观察都通过一个方法来指向