iOS内存管理-ARC

Posted lh-learn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS内存管理-ARC相关的知识,希望对你有一定的参考价值。

一:什么是ARC,ARC是ios5引入的内存管理机制,即自动引用计数。相对于iOS早期的MRC即手动管理计数,在内存管理上更加高效和简便。

例如在一个函数中,初始化一个对象或者去持有一个对象则引用计数+1,但不再使用这个对象时,引用计数将会-1。这个过程如果使用MRC来操作,则需要手动写入retain和release,而ARC则优化了这个过程。

 

二:ARC的核心思想:

1.自己生成的对象,自己持有

2.非自己生成的对象,自己可以持有

3.自己持有的对象不在需要时,需要对其进行释放

4.非自己持有的对象无法释放

 

三:ARC在编译时,自动调用了retain(保留)和release(释放)的方法

ARC在运行时,主要指weak关键字,weak修饰的变量或者对象在引用计数为0时会自动设置成nil。

 

四:为什么有了ARC还需要 @autoreleasePool?

autoreleasePool:把需要释放的内存统一放在地方,当不需要时一起释放,可以理解为ARC的release操作的延迟。是一种集中式释放内存的机制,这是对ARC内存管理优化的手段吧
 
五:内存相关的一些关键字:
strong:符表示指向并持有该对象,其修饰对象的引用计数会加1。该对象只要引用计数不为0就不会被销毁。当然可以通过将变量强制赋值 nil 来进行销毁。
 
weak: 修饰符指向但是并不持有该对象,引用计数也不会加1。在 Runtime 中对该属性进行了相关操作,无需处理,可以自动销毁。weak用来修饰对象,多用于避免循环引用的地方。              weak 不可以修饰基本数据类型。
 
assign:主要用于修饰基本数据类型(NSInteger,float)
 
copy:strong类似,copy 多用于修饰有可变类型的不可变对象上 NSString,NSArray,NSDictionary上.
 
六:防止循环引用的方法
  • 注意变量作用域,使用 autorelease 让编译器来处理引用。
  • 使用弱引用(__weak)。
  • 当实例变量完成工作后,将其置为 nil
 
 


 

以上是关于iOS内存管理-ARC的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发 arc与非Arc代码的区别

iOS之深入解析内存管理MRC与ARC机制

iOS内存管理-ARC

IOS开发 arc与非Arc代码的区别

iOS开发ARC内存管理技术要点

iOS之内存管理(ARC)