iOS面试复习--内存管理

1.只有OC对象才需要进行内存管理的本质原因

--1.OC对象存放于堆中

--2.非OC对象存在栈中(栈内存会被系统自动回收)

2.堆和栈

--1.栈:由操作系统自动进行释放和分配,(存放函数的参数值,局部变量值等),其操作方式类似于数据结构中的栈(先进后出)

--2.堆:一般由程序员手动分配释放,若不释放,程序结束时可能由操作系统回收,分配方式类似于链表

非oc对象和局部变量存在于栈中,而alloc 出的类的实例对象在堆中,返回由栈中的p引用

3.引用计数

任何一个对象,刚产生时,引用计数都为1(当使用alloc、new、copy 创建一个对象时,对象的引用计数器默认就是1

--1.retain 方法 引用计数+1

--2.release 方法 引用计数-1

--3.retainCount消息,获得对象当前的引用计数值

也就是说一次(alloc new copy)对应一次release ,一次retain 对应一次release

4.dealloc方法

当一个对象的引用计数为0时,该对象即将被销毁,占用的系统内存将被回收

对象即将被销毁是,系统会调用dealloc方法,重写dealloc   方法时 必须在最后调用[super dealloc]方法

5.野指针和空指针僵尸对象

--1.只要一个对象被释放了,我们就称这个对象为僵尸对象

当一个指针指向僵尸对象,则这个指针为野指针

只要给一个野指针发送消息就会报错

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 1,989评论 1 16
  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 1,521评论 1 3
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 5,749评论 8 119
  • 内存管理的原理? 内存空间总共有8块区域,有两个区域需要特别注意,一个就是堆空间,一个就是栈空间。栈里存放临时变量...
    Carden阅读 472评论 0 1
  • 如果我说模仿是本能,你同意吗? 看看小婴儿,从学着笑、尝试爬、练走路到开口说话,哪一样少了模仿这一步,模仿是我们学...
    乌龟橙阅读 311评论 5 1