delegate block 通知的区别

原创 2016年08月30日 13:55:55

delegate:

1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;

2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败.


block:

1:写法更简练,不需要写protocol、函数等等

2,block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息

3,block需要注意防止循环引用:


ARC下这样防止:

__weak typeof(self) weakSelf = self;

   [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

       [weakSelf doSomething];

     }];


非ARC


__block typeof(self) weakSelf = self;

   [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

       [weakSelf doSomething];

     }];


delegate运行成本低。block成本很高的。
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;delegate只是保存了一个对象指针,直接回调,没有额外消耗。相对C的函数指针,只多做了一个查表动作

消息能实现一对多,使用场合较多,比如APPDelegate将推送消息发给多个ViewController,但是一定要注意,一旦接收消息的对象多了,就难以控制了,可能有你不希望的对象接受了消息并做了处理,另外一旦注册了观察者,在dealloc里面一定要移除;


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

导航控制器下UIViewController之间的传值 ------ 代理(delegate)传值 单例传值 Target-Action传值 属性传值 block传值 通知传值

1.代理(delegate)传值 ---- 顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。     实质就是:比如右AB两个页面,A想要传值给B ,就只要先在A中得到B的...

iOS中block和delegate的区别(面试必问)

作为非常常见,且不出不在的block和delegate,理解它们,是我们掌握iOS开发必备知识点。 1.从源头上理解和区别block和delegate delegate运行成本低,block的运行...

KVO,NSNotification,delegate及block区别?

KVO,NSNotification,delegate及block区别? KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值得变化,比如View的高度变...

通知、代理以及block的区别

1、通知中心(NSNotificationCenter)     a、每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信     b...

delegate&block

  • 2015-12-19 10:45
  • 34KB
  • 下载

Delegate&Block作回调

  • 2015-09-05 21:01
  • 38KB
  • 下载

BlocksKit初见:一个支持将delegate转换成block的Cocoa库

简介 项目主页: https://github.com/zwaldowski/BlocksKit BlocksKit 是一个开源的框架,对 Cocoa 进行了扩展,将许多需要通过 delegate 调...

swift中delegate与block的反向传值

swift中delegate与block的反向传值
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)