前面的博客中提到过回调的概念,是在oc通过协议来实现的回调,和java中的接口的回调极为相似,下面来介绍另一种方法回调模式: target-action回调。首先我们来从字面意思来理解一下target-action回调模式,target目标即我们要调用哪个目标对象中的方法。action是行为的意思,就是我们要调用目标对象中的哪一个方法。委托回调模式之前在java中接触过,而target-action回调模式笔者是第一次接触,可能是笔者道行太浅,感觉这是oc中对回调的新用法,感觉还行,不难理解。
还是那句话,废话少说,用代码说问题最为直接了。下面代码是笔者根据自己的理解写的的测试demo,不足之处还请批评指正,转载或者引用请注明出处。
在做测试的project中,我们需要用到一个controler和两个组件componentone和componenttwo。为了体现出target-action回调模式,我们需要在组件中通过target-action回调模式来回调controler中每个组件所对应的方法。为实现在组件中的回调,我们需要controler在组件中进行注册,不然就找不到target对象和回调的方法啦。
为了作对比,在组件1中回调的方法是不带参数的,而在组件2中回调的方法是带参数的。可能到这读者看来上面的内容感觉有点抽象,看代码来的最为直接,代码走起~
1.首先我们先编写我们的组件1,在组件1中回调的controler方法是不带参数的
组件1中的接口:
组件1的实现:
代码说明:
1.属性target用于接收controler的对象,也就是要回调的目标对象。
2.属性action用于接收目标对象的方法,也就是要在目标对象中要回调的方法
3.addtarget: action:方法用于注册目标动作,说白了目标对象和目标对象的方法是通过这个方法传入到组件中的
4.start函数负责回调目标对象中的方法
2.组件1完事以后我们就开始编写我们的组件2啦,组件2和组件1中唯一不同的地方是回调的方法需要组件2提供参数,下面就只给出不同的部分代码:
代码说明: 在回调controler方法的时候,需要组件2提供参数,然后再回调
3.组件写好了,接下来我们就开始装配了,下面我们就开始编写我们的controler方法,来完成组装任务,并且给每个组件提供相应的回调方法。在每个回调方法中就开始编写我们的业务逻辑,同时也可以根据组件提供的参数来实现我们的特定业务逻辑。下面就是我们的controler的实现部分。
装配时为了隐藏我们的组件,我们在实现文件中用延展来装配我们的组件,假定在controler中要使用我们的组件1、2,controler中的代码如下:
代码说明:
1.在controler中我们声明并实例化了我们要使用的组件模块
2.在controler中声明和实现组件中controler对象要回调的方法
3.在组件实例化后我们要再组件中注册我们要调用controler中的那个方法。
4.注册后,我们就可以启动组件来测试组件功能
4,在mian函数中我们为了测试,把controler进行实例化,代码如下:
上面代码的运行结果如下:
上面所有的代码是笔者根据个人理解target-action回调模式来设计的样例,因水平有限,避免有偏颇之处。希望大家批评指正。