我目前正在学习Objective-C,并在Protocols中遇到了可选方法。我的背景是C#,可以看到一个类似于C#接口的协议。
如果C#接口代表合同,通过宣传接口,您说您将实施定义的方法。
考虑到这一点,我很困惑为什么你需要定义一个可选方法。这不是诽谤或试图减少Objective-C,我喜欢Objective-C。我只是想了解这些可选方法的好处,以便更好地理解语言。
如果有人可以提供一些可选方法有用的真实场景(带有示例代码),我真的很感激。
答案 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];
}