代码之家  ›  专栏  ›  技术社区  ›  kim3er

@optional protocol方法的实际示例

  •  10
  • kim3er  · 技术社区  · 15 年前

    我现在正在学习Objective-C,并且在协议中遇到了可选的方法。我的背景是C,可以看到协议类似于C接口。

    当一个C接口表示一个契约时,通过广告一个接口,你说你将实现定义的方法。

    考虑到这一点,我很困惑为什么您需要定义可选方法。这不是污蔑或试图降低客观C,我喜欢客观C。我只是想了解这些可选方法的好处,以便更好地理解语言。

    如果有人能提供一些可选方法有用的真实场景(带示例代码),我会非常感激。

    1 回复  |  直到 12 年前
        1
  •  14
  •   Fraser Speirs    15 年前

    我给你举个例子。我有许多objc类可以与flickr api对话。一,叫 FKAccount 可以做很多与Flickr用户帐户相关的事情,包括下载用户的照片、获取他们的联系人列表等。

    这个 FKEntk 类定义委托协议 FKAccountDelegate . 此协议指定了许多回调方法, FKEntk 将根据对Flickr的各种网络操作的成功或失败对其委托进行调用。不是所有使用 FKEntk 会对每一个Flickr操作感兴趣 FKEntk 可以执行。

    如果要求每个班级都声称 FK会计代表 协议实现了每一个方法,您最终会得到很多存根方法(fwiw,共有41个方法在 FK会计代表 )当这些方法被声明时 @optional 在协议中,委托只需要实现它感兴趣的回调。

    这个 FKEntk 类检查其委托是否响应 @可选 协议中的方法:

    if([self.delegate respondsToSelector: @selector(accountDidDownloadContacts:)]) {
        [self.delegate accountDidDownloadContacts: self];
    }