1.object-c 的 代理protocol,以及block能传值的深层次的原因是:它们的申明和实现可以在两个不同的类进行,所以这就符合在不同的类中传值的要求。
(1)协议的拥有者,可以创建协议实例,也就是协议执行者比如tabeview.delegate = self; self为协议的执行者 ,tableview为协议的拥有者。协议方法在协议中申明而在协议拥有者中被协议执行者调用,协议方法在协议执行者众实现.
(2)block是同样的道理
2.那么swift中的代理和闭包能传值的深层次原因也是:它们的申明和实现可以在两个不同的类进行,所以这就符合在不同的类中传值的要求。
其实闭包以及block是函数的变体一样。
那么可以推断不管任何语言,在2个代码文件(class)中的传值,其实都是函数(闭包--swift?block--oc?钩子--c++?)的申明和实现可以放在不同class中。