iOS 关于Block一些知识点记录
2019-04-03 本文已影响0人
飞不越疯人院
● _NSConcretStackBlock 栈区
● _NSConcretGlobalBlock 全局
● _NSConcretMallocBlock 堆区
Block: 代码块, 类似方法; (方法在调用时从硬盘读取到内存, 然后执行, 执行后就消失);
所以方法的内存不需要我们管理, 也就是说方法在内存的栈区;
block不像OC中的类对象(在堆区),Block是在栈区, 没法控制其消亡, 但是当用copy修饰的时候, 系统会把block拷贝一份到堆区, 这样就拥有了该block的所有权,进而控制其消亡的周期;
block为什么要用copy修饰?
block类似于于方法, 方法是调用的时候从硬盘读取到内存, 然后去执行, 执行完毕就消失, 所以方法的内存不需要我们
手动管理, 也就是说方法存在于内存中的栈区;
OC中的类对象, 存在于堆区;
block存在于栈区, 所以没法控制其消亡, 使用copy修饰后相当于拷贝一份到了堆区, 对于这样的属性, 就拥有了该
ARC:
block 的所有权, 保证block代码块不会被提前消亡;
如果用weak修饰, 择block存在于栈空间;
用__weak修饰防止循环引用的问题;
MRC:
用__block修饰,防止循环应用的问题;
block内部想对外部的变量修改需要用__block修改;