在计算机科学里, 回调(Callback)是指将一段可执行的代码以参数(面向对象程序里,也可以通过成员变量赋值的方式)的方式传递给目标代码。目标代码可以在需要的时刻(反向)调用传入的这段代码。
回调分为两种:
1. 同步回调(synchronous callbacks),又名阻塞回调(blocking callbacks)
2. 异步回调 (asynchronouscallbacks)又名非阻塞回调(non-blocking callbacks)
注意“同步异步”和 “阻塞非阻塞”并不是同一个概念,具体区别请自己搜索。
异步回调一般是用线程技术来实现的,主要用于一些比较耗时的操作,让这个操作在非主线程中执行,主线程中被调用函数立即返回,因此不会阻塞主线程,一般用户的UI执行在主线程,这样实现不会影响用户的操作体验。因为函数返回时,操作还在进行,所以操作结果或者数据传递就需要用回调来返回给调用者。
同步回调是指 被调用的函数也在主线程中执行,执行中会调用回调完成某些功能,或者执行完成后用回调函数返回结果。
初学者可能认为有返回值了,为什么还需要同步回调返回数据呢?
举个例子,有一个函数,可以完成不同对象的相同操作,例如对一组相同类型对象进行排序,
排序函数需要知道两个对象如何比较大小才能用通用的排序算法对这组对象进行排序, 那么就需要调用者传入一个比较大小的回调函数,这样排序函数可以完成整个排序操作。
总结下就是目标函数需要依赖回调函数才能完目标操作,就需要用到同步回调。
对于回调在objective-c中的实现方法,就不区分同步异步,同一种实现,可以用于同步回调,也可以用于异步回调。
然后我们来介绍回调在objective-C中的实现方法。
1. 继承自c语言中的函数指针