IOS Delegate & protocal

总结一下:

delegate是一个方式,程序组成单元之间分工的一种协调思想

protocal 这个东西不能单独说,要与它相关的两个主要东西一起说,一个是 委托者 通常是VIEW, 一个是被委托者 通常是某个CONTROLLER

它主要用来预先定义出来一个协议,可以理解为TCP/IP协议的思想,大家即 服务端、客户端 都按这个TCP/IP的协议规范来 沟通。

既然把它叫一个协议,那它一定有一个明确具体的定义,定义它有什么功能,即行为,或叫干什么事。

这个所谓的干什么事,就是预先定义出来,给委托者调用(由被委托者实现,协议只是定义一个行为的名字和相应的参数及类型),定义也定义好了。

下面就是,被委托者FOLLOW这个协议,然后实现它。委托者就可以设置自己的委托人是人,就是设置被委托人的引用到自己的DELEGATE属性上。

anyController.delegate = self.  SELF这个类里去实现协议方法。

那么委托者有了具体的委托人了,就可以有效的进行调用 这个协议里预先定义过的方法了。

委托者在类定义的头文件中也需要声明好一个 DELEGATE的属性 (@PROPERTY ID<PROTOACALNAME> delegate 这种形式)。

那这样一个有机的配合机制就出来了,这几者之间的一个明确的协调工作方式就完成了。

即,VIEW & CONTROLLER 双方都遵守了 PROTOCAL协议,如同服务端 与 客户端都 遵循实现了 TCP/IP协议

//-----------------------------------------------------------------------------------------------------------------Concolusion

PROTOCAL 用来定义预期的行为 @protocal { -(void)method_name;} @end

VIEW用来调用PROTOCAL定义的行为, 调用形式即 [view.delegate method_name_defined_in_protoal];

CONTROLLER用来实现PROTOCAL定义的行为,且,CONTROLLER被设置为VIEW的DELEGATE。即传引用给CONTROLLER的DELEGATE属性。 view.delegate = self;

会让整个程序模块功能之间的协作很清晰,它不是唯一的好方式,但确是一种好方式。

原文地址:https://www.cnblogs.com/killiancheung/p/4688719.html