您的位置:首页 > 其它

米花读后感_开发选择Block还是Delegate

2015-09-28 10:46 232 查看
好好学习,天天向上。

阅读地址:http://www.cocoachina.com/ios/20150927/13525.html

如有侵权,请告知,马上删除。

黑色为摘抄片段,红色为自己的理解。

1.大多数delegate protocols 都拥有几个消息源。

例如:需要的block需要的参数不同,复用造成意义不明。

这个时候使用delegate比较合适。

其实通过定义多个block也能实现,并且多个block也能定义不同的名字。但是如果消息源实在太多的话,还是利用delegate更加合适。

2.一个对象只能有一个delegate。

如果一个对象是单例,不要使用delegation。


每个对象只有一个delegate,但是如果需要把消息传递给多个人的话,每次都需要设置代理,并且遵守协议,并实现方法,使代码增多。这种情况下如果使用block,回调的消息只会进最近执行的一个方法的block中,代码量缩小很多。

3.一般的delegate方法会有返回值

如果对象的请求带有附加信息,更应该使用delegation

block回调不通过return返回结果。而是通过参数来进行返回如下,本应如此。

- (void)doSomeThingComplete:(void(^)(NSData *data))complete

{

dispatch_queue_t queue = dispatch_queue_create("test", NULL);

dispatch_async(queue, ^{

NSURL *url = [NSURL URLWithString:@"test"];

NSData *data = [NSData dataWithContentsOfURL:url];

if(complete) {

complete(data);

}

});

}

- (void)test

{

[self doSomeThingComplete:^(NSData *data) {

NSLog(@"%@",data);

}];

}

4.过程 vs 结果(Process vs. Results)

delegate的回调更多的面向过程,而block则是面向结果的。

如果你使用block去请求一个可能失败的请求,你应当只使用一个block。

通过block或者delegate其实都可以回调出个个阶段的信息,但是在设计之初,block感觉就是用于简化,略去过程的,所以block感觉正式面向结果的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: