Objective-C中的block可以分为几种不同类型:
根据定义位置
根据block的定义位置,可以分为:
- 全局块(Global Block):在方法外定义的块
- 局部块(Local Block):在方法内部定义的块
- 属性块(Property Block):定义为属性的block
根据引用外部变量
根据block是否引用外部变量,又分为:
- 非访问块(Nonaccessing Block):不访问外部变量
- 访问块(Accessing Block):可以访问外部变量
访问块需要使用__block修饰符,来修改外部变量
根据执行环境
根据block的执行环境,分为:
- 栈块(Stack Block):在函数内直接调用的块
- 堆块(Heap Block):将block赋值给对象属性或变量
堆块会在堆上被复制,存在更长的生命周期。
block类型
block自身也分为不同类型:
- 无参无返回值块
- 有参无返回值块
- 无参有返回值块
- 有参有返回值块
综上所述,根据不同的分类角度,Objective-C的block有多种不同类型,理解这些区别有助于在编程中合理使用block。