android工程师开发IOS oc浅析(14)之MRC与ARC

24 篇文章 0 订阅

1.为什么要进行内存管理?管理的是什么?

内存管理,管理的是任何继承自NSObject的对象,因为一般的其他基本数据类型的局部变量都是储存在栈区的,当代码块执行结束,代码块中的局部变量出作用于就会被回收,而OC对象则不一样,OC对象类型是程序在运行过程中动态分配的,存储在堆区,其指针存在栈区,当出代码块后,作为局部变量的它其指针会被回收,但是堆区中的对象没有被释放,造成内存泄漏.

2.MRC

MRC,即Manual Reference Counting,在MRC下,我们根据对象的引用计数器来进行内存管理的.每个对象刚被创建的时候,默认的引用计数器为1,当引用计数器为0的时候,该对象就被销毁.我们可以把retain,alloc,new,copy看做是对引用计数+1操作,需要在适当的位置调用release或者autorelease使其-1保证没有内存泄漏. 内存管理的原则,谁创建,谁release;谁retain,谁release.

3.野指针和内存泄漏​

谈到内存管理,不得不提到野指针和内存泄漏现象.野指针就是访问了僵尸对象,也就是访问了所占内存已经被回收的对象,这将直接导致程序崩溃.内存泄漏则是指不在使用的对象没有被回收,从而导致内存泄漏,程序闪退.

4.ARC​

ARC,即Automatic Reference Counting,ARC是编译器特性,而不是运行时特征或者垃圾回收机制,ARC只是在编辑期间,为我们在合适的位置上插入release或者autorelease,我们自己不需要写retain,release和autorelease.

ARC下内存管理的判断标准就是对象有无强指针指向,只要没有强指针指向对象,该对象就会被释放.所有的指针默认都是强指针,强指针是用__strong修饰的,弱指针用__weak修饰,一般对于循环引用现象,将循环中一个对象设置为__weak就可以解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值