zoukankan      html  css  js  c++  java
  • block(九)Block 和 Delegate 的使用比较

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

     

    Block(代码块)

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

    缺点: 如果用的不熟练容易引起循环引用,造成内存泄漏

    Delegate(代理)

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

    缺点:

          因方法的声明和实现分离开来,代码的连贯性不是很好

           代理很多时候需要存储一些临时数据

    优点:

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

    4.如何选择使用哪一种

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

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

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

     

    Block分为三种:

    临时性的,只用在栈当中,不会存储起来。
    比如数组的 foreach 遍历,这个遍历用到的 block 是临时的,不会存储起来。

    需要存储起来,但只会调用一次,或者有一个完成时期。
    比如一个 UIView 的动画,动画完成之后,需要使用 block 通知外面,一旦调用 block 之后,这个 block 就可以删掉。

    需要存储起来,可能会调用多次。
    比如按钮的点击事件,假如采用 block 实现,这种 block 就需要长期存储,并且会调用多次。调用之后,block 也不可以删除,可能还有下一次按钮的点击

    具体block怎么删除 ,是程序员手动程序删除还是  arc系统自动删除,未完待续。。。

    欢迎大家在评论中发表自己的看法

  • 相关阅读:
    js中return、return true、return false的区别
    flask,中间键
    flask,自定义中间件
    flask,闪现
    flask获取前端发送过来的数据
    flask中的如何将后端写前端的代码设置session
    flask中的正则匹配
    flask中的四剑客 及其他参数
    支付宝接口
    flasks框架简介
  • 原文地址:https://www.cnblogs.com/isItOk/p/8108530.html
Copyright © 2011-2022 走看看