首先说明这些是根据开发者们的文章复制黏贴组合得来的,有不正确的还请指正
懒得看的可以直接往下看结论

1内存调用机制
iOS本身的内存调用机制与Mac同源,但是与Windows有本质的区别。
Windows为了兼容古老和不规范的程序,允许程序直接控制硬件,导致windows系统权限不足,而许多Windows程序也不规范,因此在退出进程后往往许多内存并没有真正还给系统变成了空闲内存,导致时间一长系统可用内存越来越少,所以,Windows系统之下,需要一款软件进行内存优化并且及时释放空闲内存。
但Mac或者iOS却不是这样。Mac/iOS系统会将内存分为自由(free)、空闲(inactive)、活跃(active)以及固定(wired)四个类型,并且根据系统需要进行相互转化,所以如果系统本身没有Bug的话,内存一旦能够充足供应,系统就不会出现内存枯竭。
不过问题依旧产生了,随着iOS版本的升级,设备开始出现缓慢或者内存不足的现象。姑且忽略Bug的原因,其本质应该是系统越来越高的多进程需求,让低版本的设备内存开始吃力,而这并不是系统原因而是硬件原因。
2软件后台程序运行机制
下面 Speirs 描述了iOS是如何在后台处理程序的:
关闭 - 这个程序以彻底关闭或尚未被开启
待用 - 程序处于开启状态,但是并未收到任何指令(例如:程序开启但用户锁定了机器)
使用中 - 正常使用中的程序
后台 - 程序不在开启状态但仍然在后台运行代码暂停 - 程序仍然在使用内存但并未运行代码
技术上来讲,所有的程续在按Home键后只有5秒钟的后台时间,iOS在将这些程序变为暂停状态前给予它们一个非常有限的时间来清除所需清除的内容,之后程序变会被保留在记忆体中以便可以快速的开启它。
另外,当程序有特殊需求在后台运行更久而并非5秒钟时,Speirs 使用了 Instacast 做为例子对其进行了讲解,当 Instacast 正在后台下载 podcasts 时它会告诉iOS系统它正在下载东西,这样使得iOS系统给于其多10分钟的时间而并非5秒钟的时间,一但10分钟时限到达后 Instacast 将会被强制切换至暂停模式。当然还有相当一部分的程序是长期在后台工作的,如邮件、音乐、GPS、Voip、电子报等。这些程序都会一直在后台运行直至它完成它本身的任务。
3内存充足时应用释放内存的内在交换机制
iOS平台的内存管理采用引用计数的机制;当创建一个对象时使用alloc或者allWithZone方法时,引用计数就会+1;当释放对象使用release方法时,引用计数就是-1;这就意味着每一个对象都会跟踪有多少其他对象引用它,一旦引用计数为0,该对象的内存就会被释放掉;另外,iOS也提供了一种延时释放的机制AutoRelease,以这种方式申请的内存,开发者无需手动释放,系统会在某一时机释放该内存。
4 内存不足时应用释放内存的内在交换机制
ios不是神级存在,也有内存不足的时候
由于iOS平台的内存管理机制,不支持虚拟内存,所以在内存不足的情况,不会去ROM上创建虚拟内存;所以一旦出现内存不足的情况,iOS平台会通知所有已经运行的app,不论是前台app还是后台挂起的app,都会收到 memory warning的notice;一旦app收到memory warning的notice,就应该回收占用内存较大的变量;
1: app收到系统发过来的memory warning的notice;
2: app释放占用较大的内存;
3: 系统回收此app所创建的autorelease的对象;
4: app返回到已经打开的页面时,系统重新调用viewdidload方法,view重新加载页面数据;重新显示。
5结论
IOS不需要内存清理工具,系统会自动释放内存以保证流畅。
另外这些工具也无法对内存进行直接操作,除非越狱。
说白了IOS的后台相当于一个历史记录,只不过记录里的程序已经预先载入内存了。
如果未越狱的机器在运行第三方软件时卡了,那只能说明是硬件不行了,该换了。
再罗嗦一句,那些所谓的电池医生也都是骗人的,因为IOS根本没有api来允许程序干涉电池状态,唯一的几个关于电池的api只是用来看电量的罢了

最后附上一段视频, 鸟语未翻译

视频来自:优酷

关于IOS内存机制的较深入分析相关推荐

  1. iOS内存管理机制解析

    软件运行时会分配和使用设备的内存资源,因此,在软件开发的过程中,需要进行内存管理,以保证高效.快速的分配内存,并且在适当的时候释放和回收内存资源. 一.Objective-C内存管理的对象 IOS开发 ...

  2. iOS 内存管理机制与原理

    内存分区 内存一般分为五大区:栈区.堆区.常量区.全局区.代码区.如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量.函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则.一 ...

  3. Objective-C runtime机制(5)——iOS 内存管理

    概述 当我们创建一个对象时: SWHunter *hunter = [[SWHunter alloc] init]; 上面这行代码在栈上创建了hunter指针,并在堆上创建了一个SWHunter对象. ...

  4. 【Bugly干货分享】iOS内存管理:从MRC到ARC实践

    本文作者:王拥军 腾讯自选股高级开发工程师 Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创. 对于i ...

  5. iOS内存管理策略和实践

    来源:http://www.baidu.com/link?url=irojqCBbZKsY7b0L2EBPkuEkfJ9MQvUf8kuNWQUXkBLk5b22Jl5rjozKaJS3n78jCnS ...

  6. Android Flutter 内存机制初探

    阿里妹导读:闲鱼技术团队一直在探索如何使用Flutter来统一移动App开发.移动设备上的资源有限,内存使用成了日常开发中的常见问题.那么,Flutter是如何使用内存,又会对Native App的内 ...

  7. iOS内存管理(ARC,MRC)

    iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理 ...

  8. iOS内存管理系列之一:对象所有权与引用计数

    原文地址:[转]iOS内存管理系列之一:对象所有权与引用计数作者:anynot 内存管理是iPhone或iPad开发中最为重要的一部分.掌握好了内存管理,开发出的应用就能运行流畅:掌握不好,开发出的东 ...

  9. Unity手游iOS内存分析和测试

    内存是Unity手游的硬伤,如果没有做好内存的相关管理和详细的测试,游戏极有可能出现卡顿.闪退等影响用户体验的现象.在此,笔者为我们介绍了一些Unity手游内存分析和测试过程中比较实用的测试场景案例. ...

最新文章

  1. 最短路合集(Dijkstra、SPFA、Floyd以及路径还原模板)
  2. 关于CSS3的filter(滤镜) 属性
  3. 【MM配置】Master Data 主数据的配置
  4. matlab eval函数_matlab自动给变量命名
  5. 中职计算机属于专业课还是文化课,对中职计算机专业建设探讨.doc
  6. Windows之vue-cli安装和vue项目快速搭建
  7. ta-lib依赖安装问题
  8. Linux下的shell编程(二)BY 四喜三顺
  9. 吴恩达机器学习作业代码(python)
  10. Oracle、MySQL、SQL server数据库去重
  11. 2019年linux云计算就业前景,云计算前景与网络前景
  12. VScode 英文翻译成中文插件(英语差的福音)
  13. 如何把NDI|HX2视频源通过高清解码器进行解码?
  14. word文档怎么生成html,word文档怎么排版
  15. linux rar文件怎么解压_Linux下rar压缩包的解压方法
  16. [ 2204听力 ] 一
  17. JavaScript 基础知识 - 入门篇(二)
  18. oracle里存储函数将金额数字转换成大写
  19. mysql时间加10分钟_将MySQL日期时间格式添加10分钟?
  20. Web端即时通讯实践干货:如何让WebSocket断网重连更快速?

热门文章

  1. 仿qq邮箱源码程序_小伙子利用C++实现邮件程序发送和接收
  2. Java基础01 1个和2个区别比较
  3. Xcode中c语言读键盘,使用Objective-C自定义键盘-Xcode8
  4. oracle 证书编号,说说Oracle的rowid
  5. t检验的p值对照表_统计学|各类统计检验方法大汇总
  6. linux文件压缩包,linux目录文件压缩包操作
  7. Java实训项目12:GUI学生信息管理系统 - 实现步骤 - 创建服务接口实现类
  8. 【BZOJ1965】【codevs1446】洗牌,快速幂+扩展欧几里德
  9. 带注释源码php,php的注释方法
  10. matlab中nc文件,教程合集 | MATLAB文件读写(以nc与txt为例)