浅谈OC中block
2022-06-01 本文已影响0人
萤火驻守心间
Block的循环引用:
block强引用self,self强引用block。解决方案:对self进行弱引用。
内部修改外部变量:
block不允许修改外部变量的值,这里的外部变量指的是栈中指针的内存地址。__block的作用是只要观察到变量被block使用,就将外部变量在栈中的内存地址放到堆中。
三种block:
1、NSGlobalBlock(全局):没有访问 auto变量 的block ,(.data区)数据区,一般存放全局变量, __NSGlobalBlock存放在这里
2、NSStackBlock(栈block):访问了auto变量 的block ,存放在栈区
3、NSMallocBlock(堆block):当一个__NSStackBlock调用了copy操作,返回的就是一个__NSMallocBlock,存放在堆区