协议和分类
2019-07-03 本文已影响0人
东了个尼
通过委托与数据源协议进行对象间通信
委托模式的主旨是:定义一套接口,某对象若想接受另外一个对象的委托,则遵守此接口,以便成为其委托对象(delegate)。而另一个对象则可以给委托对象回传一些信息,也可以发生相关事件时通知委托对象。
举例:获取网络数据的类含有一个委托对象,在获取万数据之后,它会回调这个委托对象。如下图所示,EOCDataModel对象就是EOCNetworkFetcher的委托对象。EOCDataModel请求EOCNetworkFetcher“以异步方式执行一项任务”,而EOCNetworkFetcher在执行完这项任务之后,就会通知其委托对象,也就是EOCDataModel
利用协议机制很容易实现
@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中,以隐藏实现细节。