携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
设计模式相信大家都很熟悉了,但是越是基础的东西也越是需要经常的回顾与思考,于是着手写一个温故而知新的设计模式回顾系列。
在 8 月,准备把各个常用的不常用的设计模式都进行一次回顾,并大概聊一下各个模式的特点与在 iOS 中的大概使用场景与情况。
这里是设计模式回顾的第十二篇,委托模式的相关回顾。
委托模式
1、什么是委托模式
委托模式即代理模式。
在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。
委托模式的实际意义是把某些方法委托给其他对象实现,如点击方法、传值等,在 iOS 中可通过 block 或者 delegate 实现委托。
作为一个程序员,平时敲代码非常辛苦,所以中午都会考虑出去吃午餐,而不是自己煮一顿。而你叫老板帮你做饭就相当于你把做饭这件事情委托给老板,你就负责吃老板
2、委托模式用在什么地方?
- 需要传值到上级界面 (基本用法)
- 其他页面中动态设置属性的值(tableView 的 TableViewDataSource)
- 在其他视图中实现点击事件的响应 (tableView 的 TableViewDelegate 的 didSelectIndexPath)
委托模式的使用场景基本上就只有这三个,而且这些场景的使用频率也一直很高。
3、委托模式的使用
delegate 的使用:
- 定义 protocol 和 protocol 中需要委托出去的方法
- 定义变量 id delegate,用来设置实现委托的对象
- 在委托的对象中,配置协议,设置delegate = self ,并实现协议方法
- 在合适的地点调用
[delegate protocolMethod]
block 的使用: 1、定义变量 void (^exampleBlock)(NSInteger index) (void 是返回值类型 ,NSInteger index 是需要传递的变量,exampleBlock 是 block 名称) 2、在委托的对象中,实现 block 3、在合适的地方调用 self.block() 值
delegate 与 block 都可以实现委托,block 比 delegate 使用方便,但是代码集中。这两者之间的取舍在于如果方法多的话,最好使用 delegate,否则就用 block。
注意:block 的定义为 copy、delegate 的定义为 weak
4、总结
委托模式也是很常用的一种模式,而且通过 iOS 自带的 block 和 protocol 实现十分简单,也有许多人总结过这方面的内容,属于简单的设计模式