@optional协议方法的真实例子

kim*_*3er 10 protocols objective-c optional

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

在C#接口代表合同的地方,通过宣传一个接口,你说你将实现定义的方法.

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

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

Fra*_*irs 14

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

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

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

FKAccount类将检查其代表响应@optional于所述协议通过以下方法:

if([self.delegate respondsToSelector: @selector(accountDidDownloadContacts:)]) {
    [self.delegate accountDidDownloadContacts: self];
}
Run Code Online (Sandbox Code Playgroud)