由买买提看人间百态

topics

全部话题 - 话题: delegete
(共0页)
D***n
发帖数: 6804
1
Delegate技术上说白了就是一种特殊调用函数的方法,和Hook很像。比如普通函数F()
里面运行流程是这样的:
A(); B(); C();
这个很死板,函数ABC预先要写好,编译/链接的时候必须能分别找到B的符号和实现。C
++的扩充思路是继承或者虚方法一类的,这个也必须在运行前就定死。
Delegate的思路是,不直接调用 B(),而是把B改成一个函数指针,平时指向一个特殊
值(比如self/NULL)。
(* B) (void ) = NULL;
上面程序变成
A();
if ( NULL != B) { //这个if可以控制B是must or optional
(*)B(x, y, z);
C();
这样在运行时B可以被动态赋予一个任意的函数指针。只要这个函数满足B希望的参数/
返回类型就可以了(比如参数必须是XYZ)。
在ObjC里,如果一个类型里有很多类似B这样的函数指针,就可以单独列出来形成一个
protocol,任何其他对象函数实现了这个protocol列出来的各种函数interface,再把
自己的地址赋予给B
B = & delegete;
当然在运行时,... 阅读全帖
(共0页)