iOS中 block 代理 通知的区别
2016-06-27 20:33
393 查看
1.代理
代理就是来解决类耦合性和封装变化点的,多人开发中,防止一个类改变导致别的地方也被动改变,代理通俗的说其实就是set赋值,用对象地址调用对象的方法,给对象赋值。代理是委托方声明方法,并调用,代理方实现。
比如在委托方[self.delegate 代理方法]。这时,self.delegate就相当于控制器的地址,调用的方法是控制器的方法,因为控制器是代理方,它实现的代理方法。在控制器中,委托对象.delegate = self相当于获得控制器对象的地址。
2.block
目的就是能够直接存储一个代码块的实现部分,而不需要再去定义一个函数。void (^myblock)() = 可以直接跟实现的代码块,就是将函数整体拿过来,把函数名去掉,在前面加一个block标识^。这样在别的代码块中也可以直接调用这个部分,这就是oc的优化之处。
其实block就是去相当于实现代理,block是委托方声明block方法,并调用,在代理方里面用委托方调用那个block方法,并且实现。block效率更高。
3.通知
首先通知可以群发,而代理和block只能单发,通知就是一方传值,一方接收值,把所有的东西传到一个集合里,可以控制发送给全部还是自己,接收也同样可以控制。
通知传值在远距离传值时有优势。例子:第一页推出第二页,第二页推出第三页,要想把第三页的值传给第一页,用通知传。
如果用block,block的实体在第一页,指针在第三页,无法结合,因为第三页是第二页推出来的,需要和第二页先进行交互,代理道理和block差不多。
代理就是来解决类耦合性和封装变化点的,多人开发中,防止一个类改变导致别的地方也被动改变,代理通俗的说其实就是set赋值,用对象地址调用对象的方法,给对象赋值。代理是委托方声明方法,并调用,代理方实现。
比如在委托方[self.delegate 代理方法]。这时,self.delegate就相当于控制器的地址,调用的方法是控制器的方法,因为控制器是代理方,它实现的代理方法。在控制器中,委托对象.delegate = self相当于获得控制器对象的地址。
2.block
目的就是能够直接存储一个代码块的实现部分,而不需要再去定义一个函数。void (^myblock)() = 可以直接跟实现的代码块,就是将函数整体拿过来,把函数名去掉,在前面加一个block标识^。这样在别的代码块中也可以直接调用这个部分,这就是oc的优化之处。
其实block就是去相当于实现代理,block是委托方声明block方法,并调用,在代理方里面用委托方调用那个block方法,并且实现。block效率更高。
3.通知
首先通知可以群发,而代理和block只能单发,通知就是一方传值,一方接收值,把所有的东西传到一个集合里,可以控制发送给全部还是自己,接收也同样可以控制。
通知传值在远距离传值时有优势。例子:第一页推出第二页,第二页推出第三页,要想把第三页的值传给第一页,用通知传。
如果用block,block的实体在第一页,指针在第三页,无法结合,因为第三页是第二页推出来的,需要和第二页先进行交互,代理道理和block差不多。
相关文章推荐
- DM365 spi_norflash无操作系统启动和sys_bios启动(二)
- button点击无反应
- 十三.加速度传感器
- 十二.定时器
- 十.媒体播放
- 九.忙碌指示器
- iOS文件操作
- 六.快速拨打电话接口
- 五.旋转
- 四.文件系统
- 三.容器
- ios多线程 -- GCD 常见用法
- 二 .图形API
- 一.内存管理情况
- ios多线程 -- GCD介绍
- iOS每日一记之———————————————Xcode常见的错误 总结
- iOS-block
- ios开发: 模拟器和真机在写入和读取沙盒数据时的区别
- iOS 视频直播的学习之路 ---- 直播大时代
- iOS7新特性-NSURLSession详解 - IOS开发者