首页 Effective Objective-C 2.0 读书笔记6
文章
取消

Effective Objective-C 2.0 读书笔记6

第4章 协议与分类

协议(protocol)与java“接口”类似,Objective-C不支持多继承。协议最常见的用途时实现委托模式。

分类(Category),利用分类机制,可以无需继承子类即可直接为当前类添加方法

第23条:通过委托与数据源协议进行对象间通信

委托模式(Delegate pattern)可以用来实现对象间的通信,主旨是:定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”(delegate)。而这“另一个对象”则可以给其委托对象回传信息,也可以在发生相关事件时通知委托对象。

委托协议名通常是在相关类名后面加上Delegate一词,真个类名采用“驼峰法”。

  • 类中存放其委托对象的属性需定义成weak,而非strong,因为二者之间必须为“非拥有关系”
  • 实现委托对象的方法:
    • 声明某个类遵从委托协议
    • 把协议中想实现的方法在类里实现出来
  • 委托协议中的方法一般都是”可选的”(optional),通过@optional关键字指明可选方法,若在委托对象上调用可选方法,必须提前使用类型信息查询方法判断这个委托对象是否能响应相关选择器(respondsToSelector:)
  • 委托模式:对象把应该对某个行为的责任委托给另外一个类
  • 将方法响应能力缓存起来的最佳途径是使用“段位”(bitfield)数据类型

要点

  • 委托模式为对象提供类一套接口,使其可由此将相关事件告知其他对象。
  • 将委托对象应该支持的接口定义成协议,在协议中把可能需要处理的事件定义成方法。
  • 当某对象需要从另外一个对象中获取数据时,可以使用委托模式,这种情况下,称为“数据源协议”
  • 若有必要,可实现含有段位的结构体,将委托对象是否能响应相关协议方法这一信息缓存其中。
本文由作者按照 CC BY 4.0 进行授权