关于iOS Delegate的个人理解

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模式必不可少的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值