From: http://ihuby.info/2011/07/18/ios%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93-%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/

iOS 开发中的一个重要部分就是关于内存的使用管理,用的不好就容易就产生内存泄露或内存错误访问,造成软件的崩溃,影响产品的使用和用户体验。在团队协调开发中也整理过了一些开发规范,正好看到国外的一篇开发博客文章“10-iphone-memory-management-tips”,其重要列表部分我翻译并整理一下。

一些重要的背景知识点:

  1. iPhone3G只有128M RAM内存,至少有一半是要留给操作系统;也即大概只有很小的40M内存左右留给了应用程序… 另外请记住,即使你开发的应用只使用了3M内存的时候,也有可能收到系统的内存警告通知。(Huby注:3GS内存总大小是256M,应用程序能使用大概不到80M;而iPhone4的内存大小是512M,应用程序能使用大概180M左右。而Apple对一个App设定的限额一般是20M)
  2. iPhone 不使用垃圾回收机制,即使Objective-C 2.0中有垃圾回收机制可使用(用Objective-C 2.0开发Leopard上的App可使用垃圾回收)。
  3. 内存管理的基本原则是:任何一处对象只要调用了 [ alloc | retain | copy ]一次,就必须在代码某处有一一对应执行相应的 [release] 方法。
  4. Objective-C 运行时的对象实例都是在堆(Heap)中,不允许在栈(stack)中创建实例对象;这意味着没有自动化对象,也没有智能指针对象帮你管理内存。
  5. 对象可以使用 autorelease 方法,但是要当心,这些对象必须等到他们的内存池自动释放的时候才能释放,如果内存池没有释放,其实也就相当于仍然产生了内存泄露。
  6. iPhone没有内存交换文件(swap file),所以也就没有虚拟内存概念。当系统没有更多内存可用的时候,那么就真的是没有了。

经验总结:

  1. 要写代码处理iOS系统的内存警告通知。
  2. 尽量避免使用对象的内存自动释放机制。
  3. 使用延迟加载创建对象以及内存对象的重用机制。(注: 横向或纵向滚动列表中特别适用)
  4. 尽量避免使用UIImage的imangeNamed方法。(注:这样就等于使用了系统内存自动释放机制)
  5. 自绘Table Cell并适当重用。
  6. 重写属性的Setter方法。
  7. 小心使用委派(Delegation)机制。
  8. 使用Instruments工具优化内存使用。
  9. 使用代码静态分析工具优化代码。
  10. 启用NSZombieEnabled可发现更多内存问题。

参考资料:

iOS应用开发性能调优(from Apple)

iOS开发经验总结—内存管理相关推荐

  1. iOS/OS X内存管理(一):基本概念与原理

    iOS/OS X内存管理(一):基本概念与原理 发表于21小时前| 1585次阅读| 来源CSDN| 8 条评论| 作者刘耀柱 移动开发iOSObjective-C内存管理内存泄露局部变量开发经验 a ...

  2. iOS/OS X内存管理(二):借助工具解决内存问题

    上一篇博客<iOS/OS X内存管理(一):基本概念与原理>主要讲了iOS/OS X内存管理中引用计数和内存管理规则,以及引入ARC新的内存管理机制之后如何选择ownership qual ...

  3. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  4. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...

  5. iOS夯实:内存管理

    最近的学习计划是将iOS的机制原理好好重新打磨学习一下,总结和加入自己的思考. 有不正确的地方,多多指正. 基本信息 Objective-C 提供了两种内存管理方式. MRR (manual reta ...

  6. iOS OC08,09_内存管理

    //管理内存有三种方式,//1.是垃圾回收,java常见的管理内存的方法,系统来检測对象是否被使用,是否被释放//2.MRC手动管理引用计数,iOS管理内存的方式,程序猿通过手动的方式来管理对象是否被 ...

  7. (0048)iOS开发之内存管理探究

    注意网上很多人支招在ARC模式下可以利用_objc_rootRetainCount()或者CFGetRetainCount()取得 retainCount都是不准确的,特别是在对象拷贝操作之后你会发现 ...

  8. iOS的block内存管理

    初始情况下: block本身.__block修饰的变量以及在block内部使用的变量都是在栈里的. __block修饰的变量的地址会作为实参传入block块内部(暂时先这么理解,实际比较复杂).blo ...

  9. iphone内存管理

    http://hi.baidu.com/spopavenvldiqyr/item/c8d620b6282c4d4abb0e122a iphone内存管理(一) BY 洋葱头 http://hi.bai ...

最新文章

  1. ECLIPSE 调试F8-------运行到下一断点处 F5-------STEP INTO F6-------STEP OVER
  2. fanuc机器人cm格式文件_了解发那科智能机器人自动化物流拆垛
  3. Qt Creator分析函数执行
  4. 新闻视频 36:整合首页 用到 Repeater 主要用gridview /gridview去掉边框用到 BorderWidth=”0” inner join和 left...
  5. 进入DRF和ANGULAR的整合学习,这三篇入门内容一定要学好的
  6. ABAP report的递归submit和在虚拟机里再次启动另一个虚拟机
  7. Windows 8 C++/CX字符串
  8. 【演讲实录】下一代企业级应用架构管理体系
  9. 维基链能成为下一个以太坊吗?
  10. 强烈推荐几个BAT大佬技术公众号~值得学习!
  11. excel2016打开后空白不显示内容的解决办法
  12. NokiaE6 java_全键盘塞班Anna手机 诺基亚E6详细评测
  13. 程序员,如何做好工作复盘?
  14. Linux部署单体架构,从单体式架构迁移到微服务架构:三个策略叙述
  15. Charset API
  16. MMA8451Q传感器读值
  17. 军队文职(数学2+物理)——高等数学 3、求极限(一)
  18. 「衡水中学语录分享」喜欢点波关注呗
  19. 打开虚拟机报错,解决:Entering emergency mode. Exit the shell to continu
  20. 数学分析(2):自然数集的构建

热门文章

  1. 【快速入门Linux】8_Linux命令—系统信息相关命令(时间、磁盘、进程)
  2. office2019安装Mathtype7.4运行时错误‘53’,文件未找到:MathPage.WLL
  3. python分布爬虫_13天搞定Python分布爬虫(第七天)(Scrapy)
  4. 树莓派linux系统识别u盘启动,使用U-Boot让树莓派从U盘启动
  5. 常用的数据结构_动态图展示 6 个常用的数据结构,一目了然
  6. 宏观经济学思维导图_2019中央财经大学803经济学经验分享|三跨考生
  7. python之路day2_Python之路,day2
  8. ubuntu 安装 guetzli
  9. mv命令移动文件到指定目录
  10. 关于phi函数的积性性质的一个证明