美文网首页
简说block

简说block

作者: UncleChen | 来源:发表于2016-04-17 18:56 被阅读37次

block 在Objective-C 中使用的频率还是非常高的,网上关于介绍block 的文章也非常多,本文旨在用最少、最浅显的语言介绍block。

block 是什么?

block 在OC 中就是一个对象,但他的值是一段代码,并且有返回值和入参。

// 声明数组
NSArray *array = @[@"a", @"b"];

// 声明block
NSInteger (^sumNumbersBlock)(NSInteger a, NSInteger b) = ^(NSInteger a, NSInteger b) {
  return a+b;
};

从表面上看,声明数组和block 还是有很大不同的,但还是有一些相同点:
等号左边命名部分:

NSInteger (^sumNumbersBlock)(NSInteger a, NSInteger b);
  1. 返回值:block 需要指定返回值,上面的代码中返回值类型为NSInteger,如果什么都不返回,使用void 就可以了
  2. 类型+变量名称:格式为:(^blockName),其中^ 表示对象类型为block,并用()^ 和对象名称包起来。
  3. 参数:如果参数为空,使用(),若不为空,像这样写(NSInteger a, NSInteger b)

等号右边赋值部分:
三部分:^ + ( 参数 ) + { block 实现的逻辑代码 }

void (^block)(NSInteger a, NSInteger b);
block = ^(NSInteger a, NSInteger b) {
  // your code
};

block 应该注意的细节:

  1. 局部变量:block 中修改局部变量时需要使用__block 修饰符,否则只能获取但不能修改。
  2. 全局变量:block 中可以直接获取并且修改,不需要任何修饰符。
  3. 循环引用:block 中的对象变量需要使用__weak 修饰符,防止循环引用导致内存泄露。
  4. block 中的变量(除对象变量)在block 代码块之后发生变化,该变量在block 中也不会发生变化。

block 应用场景

  1. 回调:block 作为属性时,可以直接将回调的代码对block 进行赋值,相比delegate,结构更加简单,代码预读起来也更加方便。
  2. 入参:block 可以作为方法的入参使用,可以有效的分离业务模块和功能模块,降低代码的耦合。
  3. OC 链式编程:OC 中使用链式编程可以使用block 实现。

相关文章

  • 简说block

    block 在Objective-C 中使用的频率还是非常高的,网上关于介绍block 的文章也非常多,本文旨在用...

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • iOS-简单两步搞定自定义View

    目录 Block简介/定义Block基本使用Block在C/C++(底层)的数据结构Block的类型 Block简...

  • block 源码解析

    什么是block? 首先,看一个极简的block: block编译转换结构 对其执行clang -rewrite-...

  • iOS之Block

    参考文: 【简书】一篇文章看懂iOS代码块Block 【简书】iOS block中weakSelf和strongS...

  • SStable的写入 - KV存储-LevelDB/RocksD

    请教:简书如何写代码块? Overview Index Block andData Block 2.Index B...

  • block(极简)

    typedef void (^Block) (NSInteger a);其中 void位置是返回值类型,NSInt...

  • block

    一篇文章看懂iOS代码块Block - 简书 在Block中可以访问局部变量 Block内访问全局变量和静态变量 ...

  • Block学习总结(二)

    block 1.block的实质 之前说过其实block的本质就是"带有自动变量的匿名函数"。block类型的变量...

  • iOS中使用Clang查看Block(Closure)的实现

    什么是Block Apple文档说:“A block is an anonymous inline collect...

网友评论

      本文标题:简说block

      本文链接:https://www.haomeiwen.com/subject/fjbolttx.html