【第22期】观点:IT 行业加班,到底有没有价值?

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


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

相关文章推荐

KVO,NSNotification,delegate及block区别?

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

聊聊iOS下block + GCD 实现异步非阻塞(转)

本文用示例来说明一下iOS下用block+GCD来在程序中实现非阻塞式执行耗时任务。先说明一下,严格说来“异步”、“后台线程”、“非阻塞”这些概念是有一些小区别的。有些系统API特别是网络和文件I/O是通过系统底层中断来实现”非阻塞”,而一般用户任务比如耗时计算是通过后台线程完成的。但具体到app这...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

block 与 delegate 的区别

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

iOS中级面试题

OneV‘s Den在博客里出了10道iOS面试题,用他的话是:"列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术" 。 在这里給一份我的答案。 1. 你使用过Objective-C的运行时编程(Runtime Pro...

iOS-Delegate-Block-NSNotification的区别和使用

一,区别: Delegate-代理 “一对一”,对同一个协议,一个对象只能设置一个代理delegate, block block和delegate一样,一般都是“一对一”之间通信交互,相比代理bl...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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