iOS-delegate and block

共同点

Block 和 Delegate中的方法都可以理解成回调函数,当某件事情发生的时候取执行一段代码片段

block

block 更轻型,使用更简单,能够直接访问上下文,这样类中不需要存储临时数据。
使用 block 的代码通常会在同一个地方,这样读代码也连贯。

另:block外部使用__week修饰会防止循环引用
但是在block里面在强引用一下是为了防止变量提前释放(例如block里面有延迟调用的方法)

delegate

delegate 更重一些,需要实现接口,它的方法分离开来,很多时候需要存储一些临时数据。
另外相关的代码会被分离到各处,没有 block 好读。
代理的回调函数可以是一组多个函数,不同情况下调用不同的函数
推荐优先使用block

推荐使用delegate情况

1、多个方法。设置一次,回调多个方法,比如tableview和textview的delegate
2、避免循环引用,delegate不会造成循环引用,但是block很容易造成循环引用,相比较更加安全
3、需要对不同状态下的情况进行处理,比如UIScrollView的开始滚动、将要滚动、滚动结束等

block有三种情形

1、临时性的,比如数组的遍历,不会存储
2,一次性的,比如UIView animation...只会调用一次
3,自己声明的,比如按钮事件block,这是多次调用的,会存储下来(很容易造成循环引用)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容