block 的 MRC 和 ARC 的内存管理 和 其他理论知识

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 是指针传递

你可能感兴趣的:(block 的 MRC 和 ARC 的内存管理 和 其他理论知识)