关于iOS Delegate的个人理解

设计模式 专栏收录该内容
2 篇文章 0 订阅

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

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Jymn_Chen

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值