Block的本质
Block本质是一个oc对象,它内部有一个isa指针
Block是封装了函数调用以及函数调用环境的oc对象
Block 的变量捕获(capture)

Block类型

MRC情况下

Block类型copy 结果 MRC情况下 (ARC 自动从栈区 拷贝到堆区)

ARC情况下Copy
编译器会自动把栈区 block 拷贝到堆区
block作为函数的返回值时
block赋值给_ _strong指针时(强指针时)
block最为cocoaAPI中方法名usingBlock的方法参数时 比如数组遍历[array enumeObjc usingBlock.....]
block最为GCD API方法参数时
当对象类型的auto变量时
当block内部访问了对象类型的auto变量时
如果block在栈区,将不会对auto变量产生强引用(mrc 或arc情况)
如果block在堆区

__block修饰符

__block内存管理问题

对象类型的auto变量 __block变量

block 循环引用
ARC环境下


ARC环境下 (不支持弱指针 __weak)

网友评论