您的位置:首页 > 移动开发 > IOS开发

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差不多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: