iOS开发 - 对MRC和ARC的理解
2021-02-21 本文已影响0人
快乐灬玩耍
内存管理基本概念
在OC的内存管理,其实就是引用计数的管理。内存管理就是在程序需要时程序员分配一段内存空间,而当使用完后将它释放。如果对内存资源使用不当,不存会造成内存资源的浪费,甚至会导致程序crash等。
引用计数
当对象被创建,即通过alloc/new/copy等方法时,其引用计数器的初始值为1
当给对象发送retain消息时,其引用计数器加1。
当给对象发送release消息时,其引用计数器减1。
最后当对象的引用计数器为0时,Objc会给对象发送dealloc消息来销毁对象。
一句话谁创建、谁释放、谁引用、谁管理的原则。
空指针
没有存储任何内存地址的地址就称为空指针(NULL指针)
野指针
引用计数器为0了,还进行操作,导致程序crash
自动释放池
当我们不再使用一个对象的时候,应该将其释放。但我们很难理清一个对象什么时候不再使用,也就不知何时释放,为了解决这个问题,Objc提供了autorelease方法来解决这个问题
ARC自动内存管理
只要还有一个强指针变量指向对象,对象就会保持在内存中。
强指针和弱指针
-
默认所有实例变量和局部变量都是强指针。
-
弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。
-
不允许调用release、retain、autorelease、retainCount方法
-
重写父类的dealloc方法时,不能再调用[super dealloc];
-
两个类相互引用时,其中一个类使用strong,另一个类使用weak
ARC下使用MRC
在项目的Build Phases的Compile Sources中选择需要使用MRC方式的.m文件,然后双击该文件,在弹出的对话框中输入-fno-objc-arc即可