iOS的回调-block、通知、代理
程序运行的过程中,数据传输是APP开发必须考虑的要点,将数据从当前执行的控制器或者控件中传回控制器或者控件,则是称为回调。比如成为tableView代理的控制器,在某个时机中,将数据传回去tableView中,让tableView更新界面等等。就是回调的一种,成为代理-执行方法这种模式,也是cocoa Touch 中最常见的回调方式。
除了代理之前,还有KVO,通知(KVO的一种),block。这里我们主要探讨代理、通知和block的不同。
首先是大部分人比较熟悉的代理,代理一般需要通过6步来实现,从需要处理数据的对象——委托方,到传输数据的对象——代理方(代理一般会是控制器)。一般而言,需要6小步。如果以tableView 为例子,委托方(接收数据)tableView这个类中,需要执行三步。1.定义协议(UITableViewDelegate和UITableDataSource)。2.写需要遵循协议的属性(delegate、dataSource) 3.写协议方法。在代理方(传数据),同样需要写3步。1、遵循协议。2、成为代理。3、在适当的时机实现需要的方法。
代理用起来的时候,需要写的代码回比较都多。
然后再说说通知,通知比较常用的场景是,一个控制器中有了新数据,然后需要让对应的多个控件中相应界面也做出改变,也即是一对多的情况。另一方面,则是需要接收数据的控件或控制器,是隔层的情况时。通知就是最好的选择了,通知相当于广播,不知道收到通知的对象是谁,也不知道有多少个。只有在接收通知的对象本身才知道自己接收的通知来自谁,在接收通知之后作出相应改变。
最后简单说说block,block来说,能实现代理相同的功能。在需要回传数据的时机,实现需要使用数据的类中已经写好的bolck,然后将相应的参数写在block中。就能完成回调。用起来相对简单,但是也许理解会有一些困难。