@optional协议方法的真实例子

时间:2009-07-09 10:06:38

标签: objective-c protocols optional

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

如果C#接口代表合同,通过宣传接口,您说您将实施定义的方法。

考虑到这一点,我很困惑为什么你需要定义一个可选方法。这不是诽谤或试图减少Objective-C,我喜欢Objective-C。我只是想了解这些可选方法的好处,以便更好地理解语言。

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

1 个答案:

答案 0 :(得分:14)

我会举个例子。我有许多与Flickr API对话的ObjC类。一个名为FKAccount的人可以做很多与Flickr用户帐户相关的事情,包括下载用户的照片,获取他们的联系人列表等等。

FKAccount类定义委托协议FKAccountDelegate。此协议指定了FKAccount将在其委托上调用的多种回调方法,具体取决于对Flickr的各种网络操作的成功或失败。并非每个使用FKAccount的应用程序都会对FKAccount可以执行的每个Flickr操作感兴趣。

如果要求声称实现FKAccountDelegate协议的每个类都实现了每个方法,那么最终会有很多存根方法(FWIW,FKAccountDelegate中定义了41种方法)。当这些方法在协议中声明为@optional时,委托只需要实现它有兴趣接收的回调。

FKAccount类检查其委托是否通过以下方式响应协议中的@optional方法:

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