内存管理

内存管理

  • 内存中的五大区域
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==

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,065评论 1 16
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 11,010评论 8 119
  • 内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective-C中,也被看作是在众...
    蹲瓜阅读 8,445评论 1 8
  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 5,470评论 1 3
  • There is something inside ,that they can't get to , that ...
    东了个尼阅读 4,748评论 0 4