OC底层基础:Block

2022-02-18  本文已影响0人  节奏lhl

查看oc文件底层结构

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc xxx.m

支持ARC、指定运行时系统版本

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-15.0.0 xxx.m

一、__block修饰符

1. __block可以用于解决block内部无法修改auto变量值的问题

2. __block不能修饰全局变量、静态变量(static

3. 编译器会将__block变量包装成一个对象

__block.png
__block方法.png __block结构体1.png __block结构体2.png

二、__block的__forwarding指针

__forwarding指针.png

三、对象类型的auto变量、__block变量

1. 当block在栈上时,对他们都不会产生强引用

2. 当block被copy在堆上时,都会通过copy函数来处理他们

3. 当block从堆上移除时,都会通过dispose函数来释放它们

四、__block的内存管理

1. 当__block变量在栈上时,不会对指向的对象产生强引用

2. 当__block变量被copy到堆时

3. 如果__block变量从堆上删除

注:可能涉及的面试题

上一篇:
OC底层基础:性能优化
下一篇:
OC底层基础:RunLoop

上一篇 下一篇

猜你喜欢

热点阅读