美文网首页
内存管理

内存管理

作者: 文森star | 来源:发表于2017-06-26 22:52 被阅读0次

内存管理

  • 内存中的五大区域
1.栈区
    存储局部变量的区域   
    出了作用域之后就会被系统立即回收  
2.堆区
    存储的是OC对象 程序员手动申请的连续字节空间  需要调用free函数来释放
3.BSS段
    未初始化的全局变量 静态变量
    (一旦初始化就会从BSS段中回收掉,转存到数据段中)
4.数据段
    初始化后的全局变量 静态变量 常量数据
    (直到程序结束后才会被回收)
5.代码块
  • 内存管理的范围
1.只需要管理堆区中的oc对象的释放

2.除了堆区中的oc对象,其他区域中的数据都是系统自动释放的

3.如果程序员不主动释放它的话,将会一直到程序结束的时候才会被释放
  这样就会大量占用内存空间会导致系统崩溃
  
4.当oc对象无人使用的时候,我们就要释放这个oc对象节省内存
  • 引用计数器(retainCount)
每一个oc对象都有一个引用计数器属性 它的类型是unsigned long类型(占据8个字节)
作用:用来记录这个对象有多少个人在使用它

1.当我们新创建1个对象出来的时候,这个对象的引用计数器的默认值是1

2.当这个对象多1个人使用的时候,就应该先让这个对象的引用计数器+1

3.当这个对象少1个人使用的时候,就应该先让这个对象的引用计数器-1

4.当这个对象的引用计数器的值为0的时候,系统就会立即自动的回收这个对象
  在回收这个对象的同时,会自动的调用这个对象的dealloc方法.

==(少一个人使用就代表当前现在这个对象不再使用了就先让它-1 多一个人使用就是多了一个新的对象 先给它+1 创建的时候默认为1 当我用到那个对象的时候要先给当前对象加1之前的那个对象要-1)==

==即:release旧值 retain新值==

  • 如何操作引用计数器
1. 为对象发送1条retain消息. 那么这个对象的引用计数器的值就会+1

2. 为对象发送1条release消息. 这个对象的引用计数器的值就会-1
 
3. 为对象发送1条retainCount消息.就可以得到这个对象的引用计数器的值.

内存管理的分类
  • MRC(Manual Reference Counting)手动引用计数
当对象多1个人使用的时候.程序员要写1句代码来让这个对象的引用计数器+1
当对象少1个人使用的时候.程序员要写1句代码来让这个对象的引用计数器-1
需要程序员手动的写代码来改变对象的引用计数器的值.
  • ARC(Automatic Reference Counting)自动引用计数
系统自动的帮助我们去计算对象的引用计数器的值

ARC是新的LLVM3.0编译器的一项特性,解决了手动管理内存的麻烦.
可以说是WWDC2011和iOS5引入的最大的变革和最激动人心的变化

当ARC开启时, 编译器会自动的在合适的地方插入retain、release、autorelease代码. 
编译器自动为对象做引用计数

==Xcode6开始默认使用ARC==

相关文章

  • iOS内存管理详解

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

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

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

  • 操作系统之内存管理

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

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

网友评论

      本文标题:内存管理

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