#import "GCNetworkFetcher.h"
@interface GCNetworkFetcher () {
//用位段的数据类型缓存方法的响应能力,避免每次回调数据的时候都去检测一下 避免持续调用 if( [_delegate respondsToSelector:@selector(networkFetcher:didUpdateProgressTo:)]) {}
//用结构体来缓存委托对象是否能响应特定的选择器
struct {
unsigned int didReceivedData : 1;
unsigned int didFaileWithError : 1;
unsigned int didUpdateProgressTo : 1;
}_delegateFlags;
}
@end
@implementation GCNetworkFetcher
// 实现缓存功能所有的代码可以写在delegate属性所对应的设置方法里
- (void)setDelegate:(id<GCNetworkFetcherDelegate>)delegate {
_delegate = delegate;
_delegateFlags.didReceivedData = [delegate respondsToSelector:@selector(networkFetcher:didReceiveData:)];
_delegateFlags.didFaileWithError = [delegate respondsToSelector:@selector(networkFetcher:didFaileWithError:)];
_delegateFlags.didUpdateProgressTo = [delegate respondsToSelector:@selector(networkFetcher:didUpdateProgressTo:)];
}
- (void)getData:(NSData *)data {
if (_delegateFlags.didReceivedData) {
[_delegate networkFetcher:self didReceiveData:data];
}
}
- (void)setError:(NSError *)error {
if (_delegateFlags.didFaileWithError) {
[_delegate networkFetcher:self didFaileWithError:error];
}
}
- (void)progress:(float)progress {
if (_delegateFlags.didUpdateProgressTo) {
[_delegate networkFetcher:self didUpdateProgressTo:progress];
}
}
近期评论