iOS - Block 和 Delegate 的使用比较

http://blog.csdn.net/vbirdbest/article/details/51878995 引用

1.共同的作用:

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

2.Block(代码块)

优点:是一种轻量级的回调,能够直接访问上下文,使用块的地方和块的实现地方在同一个地方,使得代码组织更加连贯

3.Delegate(代理)

相对来说是重量级的回调,

缺点:

  • 因方法的声明和实现分离开来,代码的连贯性不是很好
  • 代理很多时候需要存储一些临时数据

优点:

  • 代理的回调函数可以是一组多个函数,在不同的时机调用不同的回调函数

4.如何选择使用哪一种

  • 当回调函数多于3个的时候,采用代理比较好

  • 使用代码块容易造成循环引用,代理不会出现该问题

  • 其他情况下优先考虑代码块

  • 异步和简单的回调用block更好

     Block分为三种:
    
     - 临时性的,只用在栈当中,不会存储起来。
       比如数组的 foreach 遍历,这个遍历用到的 block 是临时的,不会存储起来。
    
     - 需要存储起来,但只会调用一次,或者有一个完成时期。
       比如一个 UIView 的动画,动画完成之后,需要使用 block 通知外面,一旦调用 block 之后,这个 block 就可以删掉。
    
     - 需要存储起来,可能会调用多次。
       比如按钮的点击事件,假如采用 block 实现,这种 block 就需要长期存储,并且会调用多次。调用之后,block 也不可以删除,可能还有下一次按钮的点击
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容