一:什么是ARC,ARC是iOS5引入的内存管理机制,即自动引用计数。相对于iOS早期的MRC即手动管理计数,在内存管理上更加高效和简便。例如在一个函数中,初始化一个对象或者去持有一个对象则引用计数+1,但不再使用这个...
一:什么是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 Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- iOS开发 全机型适配解决方法 2023-01-14
- Android开发Compose集成高德地图实例 2023-06-15
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- iOS开发使用XML解析网络数据 2022-11-12
- IOS获取系统相册中照片的示例代码 2023-01-03
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- Flutter进阶之实现动画效果(三) 2022-10-28
- Android实现短信验证码输入框 2023-04-29