代理模式

1.书写

#import <Foundation/Foundation.h>

@class EOCNetwork;

@protocol EOCNetworkFetcherDelegate<NSObject>
@optional
- (void)networkFetcher:(EOCNetwork *)fetcher
         didReciveData:(NSData *)data;
- (void)networkFetcher:(EOCNetwork *)fetcher
         didFailWithError:(NSData *)data;
@end

//1->1个二进制位,表示yes/no
struct {
    unsigned int didReciveData      :1;
    unsigned int didFailWithError   :1;
}_deleteFlags;


@interface EOCNetwork : NSObject

@property(nonatomic, weak)id<EOCNetworkFetcherDelegate> delegate;

@end
#import "EOCNetwork.h"

@implementation EOCNetwork

-(void)setDelegate:(id<EOCNetworkFetcherDelegate>)delegate
{
    //只检测一次,避免了每次触发委托事件,都需要检测一次是否有响应
    //如果是下载进度这种,就需要不断检测,过于浪费性能
    _delegate = delegate;
    _deleteFlags.didReciveData =[delegate respondsToSelector:@selector(networkFetcher:didReciveData:)];
    _deleteFlags.didFailWithError = [delegate respondsToSelector:@selector(networkFetcher:didFailWithError:)];
}


-(void)didReceiveData
{
    if (_deleteFlags.didReciveData) {
        
    }
}

-(void)didFailWithError
{
    if (_deleteFlags.didFailWithError) {
        
    }
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容