Ios 内存管理

内存管理整理
1.为什么使用内存管理

严格的内存管理,能够使我们的应用程序在性能上有很大的提升。
如果忽略内存管理,可能导致应用占用内存过高,导致程序崩溃。

2.OC的内存管理主要有三种方式

ARC
MRC
AutoreleasePool

3.OC中内存管理的基本思想

保证任何时候指向对象的指针个数和对象的引用计数相同,多一个指针指向这个对象这个对象的引用计数就加1,少一个指针指向这个对象这个对象的引用计数就减1。没有指针指向这个对象对象就被释放了。

4.管理规则

自己生成的对象,自己持有
非自己生成的对象,自己也可以持有
不再需要自己持有对象时,释放
不是自己持有的对象,无法释放

5.自动内存管理(ARC)

1、谈谈你对 ARC 的认识和理解?
苹果在2015年 发布iOS5的时候,推出ARC技术,使我们不用去手动管理内存(retain,release),代码编译的时候会自动在需要的地方对对象进行(retain,release)

2、ARC机制中,系统判断对象是否被销毁的依据是什么?
指向对象的强指针是否被销毁

6.自动释放池

1、自动释放池底层怎么实现?
自动释放池以栈的形式实现:当你创建一个新的自动释放池时,它将被添加到栈顶。当一个对象收到发送autorelease消息时,它被添加到当前线程的处于栈顶的自动释放池中,当自动释放池被回收时,它们从栈中被删除,并且会给池子里面所有的对象都会做一次release操作。

2、什么是自动释放池?
自动释放池是用来存储多个对象类型的指针变量

3、自动释放池对池内对象的作用?
被存入到自动释放池内的对象,当自动释放池被销毁时,会对池内的对象全部做一次release操作

4、对象如何放入到自动释放池中?
当你确定要将对象放入到池中的时候,只需要调用对象的 autorelease 对象方法就可以把对象放入到自动释放池中

5、多次调用对象的autorelease方法会导致什么问题?
多次将地址存到自动释放池中,导致野指针异常

6、自动释放池作用
将对象与自动释放池建立关系,池子内调用 autorelease 方法,在自动释放池销毁时销毁对象,延迟 release 销毁时间

7、自动释放池,什么时候创建?
程序刚启动的时候,也会创建一个自动释放池
产生事件以后,运行循环开始处理事件,就会创建自动释放池

8、什么时候销毁的?
Autorelease对象是在当前的runloop迭代结束时释放的
事件处理结束以后,会销毁自动释放池
还有在池子满的时候,也会销毁

9、自动释放池使用注意:
不要把大量循环操作放在释放池下,因为这会导致大量循环内的对象没有被回收,这种情况下应该手动写 release 代码。尽量避免对大内存对象使用 autorelease ,否则会延迟大内存的回收。

10、autorelease的对象是在什么时候被release的?
答:autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的 Autoreleasepool中,当该pool被释放时,该pool中的所有Object会被调用Release。对于每一个Runloop,系统会隐式创建一个Autoreleasepool,这样所有的releasepool会构成一个象CallStack一样的一个栈式结构,在每一个 Runloop结束时,当前栈顶的Autoreleasepool会被销毁,这样这个pool里的每个Object(就是autorelease的对象)会被release。那什么是一个Runloop呢?一个UI事件,Timer call,delegate call, 都会是一个新的Runloop。

7.相关面试题

1、僵尸对象、野指针、空指针分别指什么,有什么区别?
僵尸对象: 已经被销毁的对象(xcode 中默认不实时检查僵尸对象)
野指针: 指向僵尸对象(不可用的内存)的指针
空指针: 没有指向存储空间的的指针(里面存的是nil, 也就是0),给空指针发消息不会有任何反应。

2、Objective-C有GC(垃圾回收机制)吗?
没有GC,iOS开发是支持ARC(Automatic Reference Counting的简称),ARC是在IOS5之后推出的新技术,它与GC的机制是不同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值