协议和分类

作者: 东了个尼 | 来源:发表于2019-07-03 09:03 被阅读0次
    通过委托与数据源协议进行对象间通信

    委托模式的主旨是:定义一套接口,某对象若想接受另外一个对象的委托,则遵守此接口,以便成为其委托对象(delegate)。而另一个对象则可以给委托对象回传一些信息,也可以发生相关事件时通知委托对象。
    举例:获取网络数据的类含有一个委托对象,在获取万数据之后,它会回调这个委托对象。如下图所示,EOCDataModel对象就是EOCNetworkFetcher的委托对象。EOCDataModel请求EOCNetworkFetcher“以异步方式执行一项任务”,而EOCNetworkFetcher在执行完这项任务之后,就会通知其委托对象,也就是EOCDataModel
    利用协议机制很容易实现

    屏幕快照 2019-07-01 下午5.30.02.png
    @protocol EOCNetworkFetcherDelegate 
    - (void)networkFetcher:(EOCNetworkFetcher*)fetcher did receiveData:(NSData)data;
    - (void) networkFetcher:(EOCNetworkFetcher*) fetcher didFailWithError:(NSError *)error;
    

    委托协议名通常是相关类名加Delegate一词语,有了这个协议类就可以用一个属性存放其委托对象了。在本例中,这个类就是EOCNetworkFetcher类。于是这个接口可以写成这样:

    @interface EOCNetworkFetcher:NSObject 
    @proprety(nonatomic,weak)id <EOCNetworkFetcherDelegate> delegate;
    @end
    
    屏幕快照 2019-07-02 上午9.05.19.png
    @implementation EOCDataModel ()< EOCNetworkFetcherDelegate >
    - (void)networkFetcher:(EOCNetworkFetcher*)fetcher did receiveData:(NSData)data{
    }
    - (void) networkFetcher:(EOCNetworkFetcher*) fetcher didFailWithError:(NSError *)error{
    }
    @end
    
    屏幕快照 2019-07-02 上午9.08.33.png
    将类的实现代码分散到便于管理的数个分类之中

    类中经常容易堆满各种方法,而这种方法的代码则全部堆在一个巨大的实现文件里面。在此情况下,可以通过Objective-C的分类机制,把类代码逻辑划入几个分区中,这对开发与调试都有好处


    屏幕快照 2019-07-02 下午4.27.52.png

    在实现该类时,所有代码的方法可能会写在一个大文件中。如果还向类中继续添加方法的话,那么源代码文件会越来越大,变得难于管理,所以说应该把这样的类分成几个不同的部分。例如使用分类机制把刚才的类改写成下面这样:

    屏幕快照 2019-07-02 下午4.33.13.png

    使用分类机制把类的实现代码分成易于管理的小块。
    将应该视为私有的方法归为Private中,以隐藏实现细节。

    相关文章

      网友评论

        本文标题:协议和分类

        本文链接:https://www.haomeiwen.com/subject/ebrncctx.html