iOS开发经验总结—内存管理
2013-01-31 20:40
162 查看
iOS开发经验总结—内存管理
by ADMIN on JULY18, 2011 · LEAVE
A COMMENT
iOS 开发中的一个重要部分就是关于内存的使用管理,用的不好就容易就产生内存泄露或内存错误访问,造成软件的崩溃,影响产品的使用和用户体验。在团队协调开发中也整理过了一些开发规范,正好看到国外的一篇开发博客文章“10-iphone-memory-management-tips”,其重要列表部分我翻译并整理一下。
一些重要的背景知识点:
iPhone3G只有128M RAM内存,至少有一半是要留给操作系统;也即大概只有很小的40M内存左右留给了应用程序… 另外请记住,即使你开发的应用只使用了3M内存的时候,也有可能收到系统的内存警告通知。(Huby注:3GS内存总大小是256M,应用程序能使用大概不到80M;而iPhone4的内存大小是512M,应用程序能使用大概180M左右。而Apple对一个App设定的限额一般是20M)
iPhone 不使用垃圾回收机制,即使Objective-C 2.0中有垃圾回收机制可使用(用Objective-C 2.0开发Leopard上的App可使用垃圾回收)。
内存管理的基本原则是:任何一处对象只要调用了 [ alloc | retain | copy ]一次,就必须在代码某处有一一对应执行相应的 [release] 方法。
Objective-C 运行时的对象实例都是在堆(Heap)中,不允许在栈(stack)中创建实例对象;这意味着没有自动化对象,也没有智能指针对象帮你管理内存。
对象可以使用 autorelease 方法,但是要当心,这些对象必须等到他们的内存池自动释放的时候才能释放,如果内存池没有释放,其实也就相当于仍然产生了内存泄露。
iPhone没有内存交换文件(swap file),所以也就没有虚拟内存概念。当系统没有更多内存可用的时候,那么就真的是没有了。
经验总结:
要写代码处理iOS系统的内存警告通知。
尽量避免使用对象的内存自动释放机制。
使用延迟加载创建对象以及内存对象的重用机制。(注: 横向或纵向滚动列表中特别适用)
尽量避免使用UIImage的imangeNamed方法。(注:这样就等于使用了系统内存自动释放机制)
自绘Table Cell并适当重用。
重写属性的Setter方法。
小心使用委派(Delegation)机制。
使用Instruments工具优化内存使用。
使用代码静态分析工具优化代码。
启用NSZombieEnabled可发现更多内存问题。
参考资料:
iOS应用开发性能调优(from
Apple)
相关文章推荐
- iOS开发经验总结—内存管理
- iOS开发经验总结:自定义UITableView
- iOS开发经验总结2
- [iPhone 开发]美女开发者总结的25条iOS开发经验
- 李洪强iOS开发本人集成环信的经验总结_09_处理好友请求
- 李洪强iOS开发本人集成环信的经验总结_10_刷新通讯录
- Android IOS WebRTC 音视频开发总结(六) iOS开发之含泪经验
- 【IOS】分享下近一年IOS开发的经验总结
- 对iOS开发中内存管理的一点总结与理解
- iOS 开发经验总结
- [绍棠] iOS开发经验总结
- iOS开发经验技巧-UITextField的总结
- iOS开发经验总结
- 多年 iOS 开发经验总结
- 多年iOS开发经验总结
- iOS开发经验教训总结不定期日志