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...

代理、通知、block的区别

文/yeahming(简书作者) 原文链接:http://www.jianshu.com/p/33753c326232 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 侵权删~~~ ...

delegate&block

  • 2015年12月19日 10:45
  • 34KB
  • 下载

Delegate&Block作回调

  • 2015年09月05日 21:01
  • 38KB
  • 下载

iOS开发系列----UI(视图编程入门:Delegate、Block、单例、属性传值)

本章介绍三种逆向传值方式(Delegate、Block、单例)、一种正向传值方式(属性)Delegate传值: 核心代码: SecondViewController.h#import //声明协议...

delegate、NSNotification、block比较

  • 2015年05月20日 16:52
  • 123KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delegate block 通知的区别
举报原因:
原因补充:

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