Objective-C block的分类

Objective-C中的block可以分为几种不同类型:

根据定义位置

根据block的定义位置,可以分为:

  1. 全局块(Global Block):在方法外定义的块
  2. 局部块(Local Block):在方法内部定义的块
  3. 属性块(Property Block):定义为属性的block

根据引用外部变量

根据block是否引用外部变量,又分为:

  1. 非访问块(Nonaccessing Block):不访问外部变量
  2. 访问块(Accessing Block):可以访问外部变量

访问块需要使用__block修饰符,来修改外部变量

根据执行环境

根据block的执行环境,分为:

  1. 栈块(Stack Block):在函数内直接调用的块
  2. 堆块(Heap Block):将block赋值给对象属性或变量

堆块会在堆上被复制,存在更长的生命周期。

block类型

block自身也分为不同类型:

  1. 无参无返回值块
  2. 有参无返回值块
  3. 无参有返回值块
  4. 有参有返回值块

综上所述,根据不同的分类角度,Objective-C的block有多种不同类型,理解这些区别有助于在编程中合理使用block。