米花读后感_开发选择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感觉正式面向结果的。
阅读地址: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感觉正式面向结果的。
相关文章推荐
- Yii2.0 对数据库 查询的简单操作
- jQuery、layer实现弹出层的打开、关闭
- 数字证书 从零了解
- 黑马程序员——java高新技术(新特性、反射、泛型)
- linux复制,网络报错
- DataStage 一、安装
- flume-ng+Kafka+Storm+HDFS 实时系统搭建
- ASP.NET 5 MVC6系列教程 (三):view components介绍
- ::before和::after伪元素的用法
- C++ int main(int argc,char* argv[])详解
- 5秒钟抢光iPhone 6s 黄牛是怎么做到的?
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法
- codeforces 576b
- DISK - Check for INT 13h Extensions
- Socket通信 C#写服务商 Delphi客户端
- mysql安装目录、配置文件存放位置
- mysql安装目录、配置文件存放位置
- 从现实到理想,你只差一个透视宝的距离
- 想要感谢的人与事
- MVC笔记1