内存管理问题

一、内存管理
内存问题体现在两个⽅⾯:内存溢出、野指针异常。1)iOS给每个应⽤程序提供了⼀定的内存,⽤于程序的运⾏。iPhone 3GS内存 30M左右,iPhone 5S 内存80M左右。⼀旦超出内存上限,程序就会Crash。2)对象内存空间已经被系统回收,仍然使⽤指针操作这块内存。野指 针异常是程序crash的主要原因。代码量越⼤的程序,越难找出出现 野指针的位置。
二、内存管理的⽅式
垃圾回收(gc)    MRC(Manual Reference Count)      ARC(Auto Reference Count)  iOS中没有垃圾回收
垃圾回收:程序员只需要开辟内存空间,不需要⽤代码显⽰地释 放,系统来判断哪些空间不再被使⽤,并回收这些内存空间,以便再 次分配。整个回收的过程不需要写任何代码,由系统⾃动完成垃圾回 收。Java开发中⼀直使⽤的就是垃圾回收技术。
Manual Reference Count,⼈⼯引⽤计数:内存的开辟和释放都由 程序代码进⾏控制。相对垃圾回收来说,对内存的控制更加灵活,可 以在需要释放的时候及时释放,对程序员的要求较⾼,程序员要熟悉 内存管理的机制。
Auto Reference Count,⾃动引⽤计数:iOS 5.0的编译器特性,它 允许⽤户只开辟空间,不⽤去释放空间。它不是垃圾回收!它的本质 还是MRC,只是编译器帮程序员默认加了释放的代码。
iOS⽀持两种内存管理⽅式:ARC和MRC。 MRC的内存管理机制是:引⽤计数。 ARC是基于MRC的。
三、影响引⽤计数的⽅法
1、 alloc 方法的作用,开辟内存,并且将内存的引用计数由 0 1。
2、 retain方法的作用是让堆区内存的引用计数加1,是对原始内存进行持有 。
3、 copy方法的作用,在内存中开辟一块新的内存,将原内存中的内容拷贝一份赋值给新内存;copy没有让原内存的引用计数增加,而是让新内存的引用计数由01
4、 release方法的作用是让内存的引用计数减1,当内存的引用计数由10时,内存会被系统回收
5、 autorelease方法的作用也是让内存的引用计数减1,但是不会马上减1,必须把autorelease写在一个自动释放池中,当自动释放池对象销毁时才真正的去执行减1
//   将对象放到容器类对象中(数组、字典、集合),添加的对象的引用计数会加1;容器对象要对他的所有元素进行一次持有 ; 当容器对象销毁时,容器中的所有元素都会执行一次减1操作;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值