浅谈iOS内存管理

说到内存管理,首先要知道内存管理的几种方式 :

垃圾回收(gc): Java中用的内存管理方式

MRC(Manual Reference Count) :

ARC(Auto Reference Count)

iOS⽀支持两种内存管理⽅方式:ARCMRCMRC的内存管理机制是:引⽤用计数。ARC是基于MRC的。

MRC 手动引用计数,空间的开辟和释放都需要我们自己来写代码控制,相比GC更灵活,但是对我们要求比较高,只有深入理解内存管理机制才可以用好MRC,

 ARC 自动引用计数,编译器特性,我们只需要写开辟空间的代码,回收空间的代码由编译器自动帮我们生成,ARC不是GC,本质上还是MRC.


iOS中引起内存问题的原因

        1.内存溢出---所需要的内存已经超过了系统可分配内存的上限.

        2.野指针异常---内存空间已经被回收,但是指针依然在操作这块被回收的空间.

        3.内存泄露---内存开辟后因为某种原因无法被回收掉.(原因可能为指针重指向).

        4.过度释放---当引用计数降到0的时候,对象占用的内存空间已经被回收,如果再对其进行任何方法的调用,原则上都会引起crash.有一些特殊的情况不会马上crash例如:1.对象内存释放时,所用内存并没有完全被擦除,仍有旧对象部分数据可用 2

  • 原内存位置被写入同类或同样结构的数据

 

OC采用引用计数机制管理内存,当一个新的引用指向对象时,计数器就递增,当去掉一个引用时,引用计数就递减,当引用计数到零时,该对象就将释放占有的资源.(引用计数只有在堆区才有意义,其它区的引用计数是无限大(-1))

如果要学习引用计数,不要用字符串类.(NSString是一个类簇,内部会根据传入的值选择符合的子类创建对象,所以我们无法判断NSString内部是以什么样的方式创建的子类,也就无法根据引用计数判断)


内存管理黄金法则;

        凡是使用了alloc,retain或者copy让内存的引用计数增加了,就需要使用release或者autorelease让内存的引用计数减少.在一段代码内,增加和减少的次数要相等.

永远不要手动的调用dealloc方法(系统会在引用计数为0的时候自动调用dealloc方法)


      



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值