涉及知识章节:
01.OC实例对象的本质
09.block全解析(1):它的本质和捕获情况
block类型
block类型及存储区域
block类型及copy操作
代码参照验证
global类型block代码
malloc类型block代码
为什么没有stackblock?
因为ARC环境下,会自动把stackblock进行copy操作,然后升级为malloc block
block的copy
block捕获对象类型的auto变量
block捕获对象类型的auto变量
编译源代码的指令
// 普通
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m
// 带weak的代码
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m
__block
作用:可以用于解决block内部无法修改auto变量值的问题,但不能修饰全局变量、静态变量(static)
原理:会生成一个对象,将auto变量编程该对象的成员
__block本质
__block内存管理1
__block内存管理2
__block的__forwarding指针
总结
对象类型的auto变量、__block变量
被__block修饰的对象类型
循环引用问题
循环问题引用解决
__weak与__unsafe_unretained区别
__weak:不会产生强引用,会自动置为nil
__unsafe_unretained :不会产生强引用,不安全,不会自动置为nil,仍然指向那个地址,会产生野指针
为什么要使用copy修饰符?
因为没有使用使用copy,就不会在堆上,目的是希望能开发来控制它的生命周期