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里面一定要移除;


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

通知、delegate和block的区别

通知:只发出通知,不需要知道向谁发出通知,一般情况下是一对多的关系,类似于广播的原理,广播台发出广播,听不听是用户的事情。 协议:强调单一拥有和可控制,改变和传递控制链,比如tableView,它的...
  • jie863230900
  • jie863230900
  • 2015年04月13日 09:26
  • 712

iOS开发Delegate,Notification,Block使用心得

iOS开发Delegate,Notification,Block使用心得(一)简要介绍 1.Delegate(代理、委托) 代理几乎是iOS开发中最常用的传值方式,在项目中的AppDelegate...
  • qq_19327355
  • qq_19327355
  • 2015年06月08日 00:58
  • 1973

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

作为非常常见,且不出不在的block和delegate,理解它们,是我们掌握iOS开发必备知识点。 1.从源头上理解和区别block和delegate delegate运行成本低,block的运行...
  • u010670946
  • u010670946
  • 2017年05月07日 17:37
  • 913

block 与 delegate 的区别

delegate运行成本低。block成本很高的。而且delegate是经典设计模式也就是大部分的语言都可以实现的模式,相对block出现比较早。 block出栈需要将使用的数据从栈内存拷贝到堆内存...
  • leikezhu1981
  • leikezhu1981
  • 2015年02月28日 16:59
  • 6054

iOS Block 和 Delegate 的使用比较

1.共同的作用: Block 和 Delegate中的方法都可以理解成回调函数,当某件事情发生的时候取执行一段代码片段 2.Block 优点:是一种轻量级的回调,能够直接访问上下文,使用块的地方和块的...
  • vbirdbest
  • vbirdbest
  • 2016年07月11日 11:12
  • 2004

iOS通讯模式(KVO、Notification、Delegate、Block、Target-Action的区别)

文章翻译自https://www.objc.io/issues/7-foundation/communication-patterns/每个Application或多或少都有一些松耦合的对象(模块)组...
  • hqqsk8
  • hqqsk8
  • 2016年07月14日 18:09
  • 2788

代理delegate与通知Notification、block的使用区别

delegate与block一般用于两个对象1对1之间的通信交互、delegate需要定义协议方法,代理对象需要实现协议方法 并且需要建立代理关系才可以实现通信。 block更加简洁,不需要定义繁...
  • u012701023
  • u012701023
  • 2015年11月01日 16:48
  • 1712

iOS中 block 代理 通知的区别

1.代理      代理就是来解决类耦合性和封装变化点的,多人开发中,防止一个类改变导致别的地方也被动改变,代理通俗的说其实就是set赋值,用对象地址调用对象的方法,给对象赋值。代理是委托方声明...
  • gavin__fan
  • gavin__fan
  • 2016年06月27日 20:33
  • 3273

个人对于OC中delegate、block的简单理解

(1)delegate解决对象对象间通信问题的关键:判断谁是代理对象,谁是被代理对象。 谁产生事件,就是被代理对象。被代理对象有一个delegate属性,并且在这个类里面定义一个protoco...
  • qq_30253103
  • qq_30253103
  • 2017年02月17日 11:11
  • 371

KVO,NSNotification、Block、Delegate和KVO的区别

KVC机制通过key找到value的原理。 当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过下面几种不同的方式解析这个调用。 首先...
  • ZShunLi
  • ZShunLi
  • 2016年03月23日 11:46
  • 686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delegate block 通知的区别
举报原因:
原因补充:

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