iOS-Block

206 阅读1分钟

定义 代码块

变量捕获

循环引用 timer delegate

Block的分类

定义:

  1. 代码块 就是对一段代码运行的封装

  2. 可以回调

  3. typedef NSInteger(^CalcuteSum)(int a,int b);
    CalcuteSum sum = ^NSInteger(int a, int b){
            NSLog(@"开始计算了%d",a+b);
            return a + b;
        };
     NSInteger tag = sum(1,10);
    

变量捕获:

  1. 局部变量的捕获 值捕获
  2. 不能修改变量的值
  3. 如果要修改局部变量的值 需要加上__Block

循环引用:

  1. vc持有block block持有self.name 变相的是 循环引用
  2. 解决方案 __weak typeof(self) weakSelf = self 对vc的self 进行弱引用
  3. 同时在block里面 强引用self __strong typeof(self) strongSelf = weakSelf

block分类:

  1. globBlock 编译的时候 全局内存中
  2. mallocBlock 堆block 通过引用计数控制释放
  3. stackBlock copy到堆block