delegate中文翻译是委托或者代理,顾名思义,就是把一些任务委托给其他人去实现。
在iOS中常用的代理包括程序的代理UIApplicationDelegate,普通视图的代理如UITableViewDelegarte。
举个生活的例子来说就是老板由于事务非常繁琐,要接电话,和客人约定见面时间等,这个时候老板请了一个秘书,而老板就把这些额外的事务委托给秘书去完成,或者说秘书就是老板的代理,即[boss setDelegate:secretary].而秘书在接受委托后在特定的事件(如电话响了,客人来了)等到来后,做出相应的响应,如接电话,先和客人会谈等,从而为老板分担了部分事务。
单纯就语言层面来看,其实个人感觉delegate和Java语言中的事件监听器actionListener非常类似,二者均负责监听特定的事件,一旦这些事件到来便调用其中的方法作出响应。
对比一下就是:
(1)Java
new actionListener(public void actionPerformed(AcrionEvent event)
{
//do something to respond to event
});
在程序中注册了一个事件监听器actionListener(),当事件event到来后将被该监听器接收到并且调用actionPerformed()方法做出响应。
(2)iOS
//UIApplicationDelegate
-(void)applicationWillEnterBackground:(UIApplication *)application {
//do something if application will enter background.
}
此时delegate相当于一个事件监听器,而实现代理必须实现代理中所规定的方法,此时若用户按下了home键,即delegate接收到了applicationWillEnterBackground的消息,于是调用协议中的(void)applicationWillEnterBackground:方法作出响应。而协议里面的方法就相当于上面的actionPerformed(ActionEvent event)方法。
那么为什么这个delegate的作用何在呢,为什么需要有delegate出现呢?
MVC是一种设计模式,当用户操作view时,为了及时作出响应更新界面,controller必须监听到用户的动作,在model处理完毕后由controller向view发送消息更新界面。MVC模式中view和controller是分离开来各司其职的,那么二者之间如何通信或者如何联系呢,这个时候delegate就用到了,将controller设置为view的delegate,view负责向用户展示图形界面,而view上的数据更新等操作则委托给controller代为完成,因此可以说delegate既实现了view和controller的分离,但又将二者紧密地联系在一起。
delegate是iOS中实现MVC模式必不可少的一部分。