美文网首页
iOS开发:ARC内存管理

iOS开发:ARC内存管理

作者: 枫_c8bd | 来源:发表于2023-07-28 21:24 被阅读0次

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上.

那么copy属性和strong有何分别呢?咱们可以定义两个对象分别为:


721927-20190408205149701-1804000705.png

然后将这两个字符串对象指向不可变字符串str:

 ![image.png](https://img.haomeiwen.com/i10406167/684a6cda4f26d6e4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


 结果输出为:

![image.png](https://img.haomeiwen.com/i10406167/30319f17530721db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

可发现不管strongStr还是copyStr的内存地址跟str一样,只是指针不同。现在将str指向其它:

image.png image.png

可得出结论:源对象为不可变字符串而言,不论使用copy还是strong属性,所对应的值是不发生变化,strong和copy并没有开辟新的内存,即并不是深拷贝。而是浅拷贝

我们再来看看str为可变对象时的结果:

image.png

输出为:

image.png

结论:源对象为可变对象时,copyStr开辟了新的内存空间,strong没有开辟新空间,所以源对象改变时,copyStr依然保持原来的值属于深拷贝,而strongStr在源对象内存地址发生改变也会 跟着改变,属于浅拷贝。此时copy的作用就是保持原值。

六:防止循环引用的方法

  • 注意变量作用域,使用 autorelease 让编译器来处理引用。
  • 使用弱引用(__weak)。
  • 当实例变量完成工作后,将其置为 nil

相关文章

  • iOS内存管理详解

    iOS内存管理 前言: 现在的iOS开发已然是ARC时代,swfit的发展趋势也不错,ARC下的日常开发,随对内存...

  • iOS夯实:ARC时代的内存管理

    iOS夯实:ARC时代的内存管理 iOS夯实:ARC时代的内存管理

  • 《iOS开发进阶》阅读笔记(一)内存管理释疑

    ARC ARC能够解决iOS开发中90%的内存管理问题,但是另外还有10%的内存管理是需要手动管理的,主要就是与底...

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • iOS内存管理相关知识点

    iOS 开发:彻底理解 iOS 内存管理(MRC、ARC)[https://www.jianshu.com/p/4...

  • iOS ARC下的内存管理

    ARC 能够解决 iOS 开发中 90% 的内存管理问题,但是另外还有 10% 内存管理,是需要开发者自己处理的,...

  • iOS 内存管理

    在开发中,内存管理是一个必要的技能,研究iOS 开发,我们通过内存布局、内存管理方案、数据结构、ARC/MRC、引...

  • iOS - ARC环境下dealloc/didReceiveMe

    block没那么难(三):block和对象的内存管理 一、iOS开发 ARC下dealloc的使用 ARC下,系统...

  • 内存管理

    ARC内存管理机制详解理解 iOS 的内存管理

  • IOS 内存管理

    转自iOS经典面试题总结--内存管理 - CocoaChina_让移动开发更简单 内存管理 1.什么是ARC? A...

网友评论

      本文标题:iOS开发:ARC内存管理

      本文链接:https://www.haomeiwen.com/subject/pcsdpdtx.html