zoukankan      html  css  js  c++  java
  • Block & 代理

    1. 特点: block 是C语言的,是一种数据类型,可以当做参数来传递(这种用的较多), 也可以当做返回值来用(用的较少),是提前转备好的代码,在需要的时候执行。

    2.定义,block在定义的时候,要使用copy进行一次拷贝。@property (nonatomic, copy) void (^MyBlock)(NSString *, NSError *);

      返回类型 (^blockName)(参数列表) = ^返回类型 (参数列表) { /// 代码实现; }

    3.默认情况下,不允许在block内部修改内部变量的指,在外部变量声明时,使用__block 修饰符,则可以在block内部修改变量  

    4.数组的遍历和排序可以使用block, 遍历: enumerateObjectsUsingBlock: 但是效率没有for 高。排序 sortedArrayUsingComparator:

    5.block和代理的对比: 

      1. block是提前准备好块代码,在需要的时候调用执行,简单,所有的代码在一起,便于阅读和维护, 适合用在回调方法较少的情况, 可以用于线程间的通信。在block中使用self 的时候,需要注意循环引用造成内存泄露的问题。解决的方法是, __Weak  typeof(self)Myself = self, 使用myself来代替self

      2.代理是调用方和被调用方,通过代理协议,来实现代理方法。调用方,1.定义协议,代理方法 2. 定义代理属性,负责执行代理方法的对象,需要使用弱指针,负责会出现循环引用 3.需要的时候,通知代理执行代理方法,需要先判断方法是否实现

      被调用方:1.遵守代理协议 2.设置代理,通知谁去执行代理方法 3.实现代理方法,等待被调用

      代理试用于协议方法很多的场景,如UITableView

  • 相关阅读:
    闲谈《一》
    GoldenGate系列一:快速搭建单向同步GoldenGate环境
    读取并分析wgetrc文件
    oracle之Flash Recovery Area全面介绍
    使用Subversion进行版本控制 附录A
    使用lstat()判断文件类型
    连接数据库时提示归档器失败 ORA00257: archiver error
    GoldenGate系统三:trouble shooting and log
    关于VMware虚拟机的上网
    使用C语言读取properties文件V1.0
  • 原文地址:https://www.cnblogs.com/yangzhifan/p/4523512.html
Copyright © 2011-2022 走看看