美文网首页
6,内存管理

6,内存管理

作者: 如果大雨落下 | 来源:发表于2020-07-03 17:38 被阅读0次
  • iOS内存管理基本原理

    iOS和其它系统一样,内存分页,每页4K。多个页构成一个region统一管理,负责管理的对象是VM object,其中包含了pager、size、resident pages等诸多属性。
    不管是Objective-C的[NSObject alloc],还是C代码的对内存分配,最终重任都会落到malloc库上,释放也是如此,最终都将使用malloc库中的free()。
    当内存吃紧时,对于可以重新载入的只读数据来说,直接清理掉,而对于可写的数据,只能通过App自己去管理维护。内存紧张时,iOS会向App发起memory warning,不配合释放足够内存者,kill!

  • 与 Java 中 GC 不同,ARC 是编译器特性,而不是基于运行时的,所以 ARC 其实是在编译阶段自动帮开发者插入了管理内存的代码,而不是实时监控与回收内存。

  1. ARC的修饰符

ARC的修饰符提供成员变量访问方法、权限、环境、内存管理类型的声明。
属性的参数分为三类,基本数据类型默认为(atomic,readwrite,assign),对象类型默认为(atomic,readwrite,strong),其中第三个参数就是该属性的内存管理方式修饰,修饰词可以是以下之一:

  • strong:强引用(引用计数+1),持有所指向对象的所有权,无修饰符情况下的默认值。如需强制释放,可置nil。
  • weak:弱引用,不持有所指向对象的所有权,引用指向的对象内存被回收之后,引用本身会置nil,避免野指针。
    使用set方法赋值时,实质上不保留新值,也不释放旧值,只设置新值。
  • retain:release旧值,再retain新值(引用计数+1)
    使用set方法赋值时,实质上是会先保留新值,再释放旧值,再设置新值,避免新旧值一样时导致对象被释放的的问题。
  • copy:release旧值,再copy新值(拷贝内容)
    一般用来修饰String、Dict、Array等需要保护其封装性的对象,尤其是在其内容可变的情况下,因此会拷贝(深拷贝)一份内容給属性使用,避免可能造成的对源内容进行改动。
    使用set方法赋值时,实质上是会先拷贝新值,再释放旧值,再设置新值。
    实际上,遵守NSCopying的对象都可以使用copy,当然,如果你确定是要共用同一份可变内容,你也可以使用strong或retain。
  • assign:直接赋值,一般用来修饰基本数据类型

weak指针的实现原理
将弱应用对象的属性存储到hash表中
当一个对象要释放时,会自动调用dealloc,接下的调用轨迹是
1、调用objc_release
2、因为对象的引用计数为0,所以执行dealloc
3、在dealloc中,调用了_objc_rootDealloc函数
4、在_objc_rootDealloc中,调用了object_dispose函数
5、调用objc_destructInstance
6、最后调用objc_clear_deallocating

https://www.jianshu.com/p/1928b54e1253

https://www.jianshu.com/p/84c03f7855ea

https://www.jianshu.com/p/d71ad82c2e36

相关文章

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • 6,内存管理

    iOS内存管理基本原理iOS和其它系统一样,内存分页,每页4K。多个页构成一个region统一管理,负责管理的对象...

  • 6.内存管理

    内存管理 在内核中分配内存不像在其他地方分配内存那么容易。造成这种局面的因素很多,根本原因是内核本身不能像用户空间...

  • 6-内存管理

    1.内存管理: 影响:如果app占用内存过大, 系统可能会强制关闭app, 造成闪退现象, 影响用户体验. 概念:...

  • 6、内存管理(1)

    一、内存管理基本概念 操作系统对内存的划分和动态分配,就是内存管理的概念。有效的内存管理在多道程序设计中非常重要,...

  • 面试题难点底层逻辑

    目录 1.多线程管理2.RunLoop3.Runtime4.内存管理5.性能(内存)优化举例6.App 编译与启动...

  • 面试题难点底层逻辑

    目录 1.多线程管理2.RunLoop3.Runtime(运行时)4.内存管理5.性能(内存)优化举例6.App ...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

网友评论

      本文标题:6,内存管理

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