iOS内存管理学习笔记一
1、引用计数
引用计数就是当前的对象被多少个其他对象所引用。这是我自己的理解。
MRC:手动引用计数,开发者自己来计算每一个对象被引用了多少次,自己进行内存的释放。
ARC:自动引用计数,编译器(xcode)来计算每一个对象的引用次数,对象由编译器来决定什么时候释放。
进一步说,所谓的ARC就是编译器帮我们在代码的合适位置插入了retain和release等MRC需要开发者手动写的关于对象引用计数的代码。
ARC环境:
1>xcode4.2或以上版本
2>LLVM3.0以上的编译器
3>编译器选项中设置ARC为有效
2、理解引用计数
举个简单的例子(可能不是那么贴切):
假如工作室里只有一盏灯,每个上班的员工上班时间都需要开灯,下班时间都需要关灯。假如有很多人上下班,最早上班的人A开了灯,A工作了八个小时下班了,把灯关掉,这样的话,没有下班的其他人都会处在一片黑暗之中。这样显然是不合理的,那么该如何解决呢?
解决这一问题是在办公室至少还有一人的状态下保持开灯,在最后一个人离开办公室的时候关灯。
我们来捋一下这个过程:
1>第一个进来的人需要照明,开灯
2>之后进来的人需要照明
3>下班离开办公室的人不需要照明
4>最后一个离开办公室的人不需要照明(此时已经无人需要照明),关灯
我们可以使用“引用计数”来判断办公室里是否还有人需要照明。过程如下:
1>第一个人进来了,需要照明,引用计数从0变为1,要开灯
2>第二个人进来了,需要照明,引用计数从1变为2
3>第一个人离开了,不需要照明,引用计数从2变为1
4>第二个人离开了,不需要照明,引用计数从1变为0,关灯
总结:只要引用计数=0,就是关灯状态,否则就是开灯状态。
在OC中,“对象”就是照明设备,那些使用该对象的“环境”就相当于需要照明的人。
开灯——生成对象(alloc,new,copy等)
需要照明——持有对象(retain等)
不需要照明——释放对象(release)
关灯——废弃对象(地址被回收,这个对象烟消云散了)
下面是个人理解的对象生命周期:
Person是一个类
Person * xiaoming = [[Person alloc]init];
这个时候再内存中开辟了一块内存空间,并初始化这个对象。引用计数从0变为1,相当于开灯。
Person * xiaohong = xiaoming;
这时候引用计数要增加了。相当于又有人需要照明,引用计数 = 2.
然后xiaohong在使用完这个对象之后就把对象释放了。现在引用计数-1,引用计数=1
[xiaohong release];
xiaoming在使用完这个对象的时候也进行了释放。相当于不需要照明,引用计数-1,引用计数 = 0 .
[xiaoming release];
这个时候,系统发现引用计数已经等于0了,这块空间需要释放回收了,回到最初的状态,于是变成下图的样子。
在这里简单说说内存泄漏的情形吧。
内存泄漏就是有些地址已经不使用了,但是依然有指针指向它导致这块地址空间不能释放。如下图所示:
这是我自己的理解,如有不妥之处还请各位不吝赐教。如果您看到这篇文章,对您有一点点的帮助,将是我最开心的事!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS App下载量少于安卓 90%,但收入要多 80%
据美国电脑周刊杂志eWeek报道,市场调研公司App Annie发布的最新报告显示,移动设备应用市场方面,2015年第3季度苹果公司 App Store获得的营收仍旧多于竞争者Google Play。然而,由于中国、墨西哥、东南亚等新兴市场的消费者购买开始新设备,变化可能随时发 生。 根据这份长达11页的报告《App Annie指数:2015年第3季度市场研究》显示,虽然谷歌Play Store的下载量比苹果 App Store的多出90%,但是就收入而言,App Store依然比Google Play高出80%。App Annie公司高级副总裁丹妮 尔·利维塔斯(Danielle Levitas)说道,“这一模式已经存在了好几年了。” 不过,丹尼尔也指出,尽管这一模式还在重复,但随着中国、墨西哥以及东南亚等新兴市场的兴起,两家公司的收入和总下载量情况或将发生质的变化。因为接下来的时间里,很可能会有成千上万的新用户涌进智能手机市场,引起波澜。 丹妮尔说道:“这与两家公司智能设备的消费人群有很大关系。”苹果产品的主要消费群体是收入水平较高的人群,以获取溢价为盈利方式,而安卓设备制造商则以...
- 下一篇
【云周刊】第125期:高考恢复40年!你们要的大数据解读来啦
本期头条 高考恢复40年!你要的大数据解读来啦 对于我们大多数,高考早已成为一段久远记忆。距离恢复高考,也已经40年过去,这40年发生的种种历史变迁,对我们每个人乃至社会都还有着深远的影响。那么本期就让我们一起用大数据来看看这40年的高考变迁吧!点击查看 看完解读,不妨也来一起聊聊当年自己的高考,暴露下年龄吧!点击查看 【云栖风向标】VOL.3:阿里云:对不起,这个官司我不服! 【深度专题】阿里云VPC最佳实践,最全面的六大场景与解决方案! 【深度学习入门】Hello World感知机,懂你我心才安息 (深度学习入门系列之五) 【直播报名】6月8日,阿里云SQL Server实践:高CPU使用率排查 【直播报名】6月8日,驻云科技新品重磅发布暨融资新闻发布会 【资料合集】首届互联网新兵进阶在线峰会:讲义PDF+活动视频!(持续更新) 【资
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6