blcok是一个对象
定义:官方文档-> Window -> Documentation and API Refrence -> 搜索 working with blocks (关于原理性)
结果:Blocks are objective-C objects
判断工程使用MRC还是ARC
- dealloc 能否被调用,只有MRC 才能调用super
- retain 和 release 能否使用
修改方法:
Budld Setting -> 搜索ARC -> objective-c Automic Refrence Counting 切换 YES or NO
ARC 管理原则:
- 只要一个对象没有被强指针修饰就是被销毁,默认局部变量对象都是强指针,存放到堆里面
MRC 开发常识
- 1.MRC没有Strong、weak 局部变量对象就是相当于基本数据类型
- 2.MRC给成员属性赋值 一定时候用Set方法,不能直接访问下划线成员属性赋值
堆、栈、全局区
-
MRC 管理总结
- 只要block没有引用外部局部变量,block放在全局区 (NSGlobalBlock)
- 只要block引用外部局部变量block放在栈里面(NSStackBlock)
- block 只能使用copy(堆 NSMallocblock) 不能使用retain(NSStackBlock)
-
ARC 中的内存管理
- 只要block没有引用外部局部变量,block放在全局区 (NSGlobalBlock)
- 只要block引用了外部局部变量block 在堆中
- block 使用Strong 不要使用weak
blok的变量传递
1.如果是局部变量 block 是只传递
2.如果是静态变量、全局变量、 __block修饰变量 block 是指针传递
网友评论