iOS内存管理高级指南(官方文档——译文)
2013-11-16 12:40
239 查看
iOS内存管理高级指南
应用程序内存管理是:“程序运行时,开辟的内存空间。使用它,释放它”的过程,写的好的程序尽可能少使用内存。在Objective-C中,内存管理被看做是:“在很多数据、代码下,分配受限内存资源所有权方法”。当你依据这个指南完成你的程序时,你将获得“通过显式管理对象的命周期,不使用的时候释放他们,来管理程序内存”的知识。尽管,典型的内存管理是作用于单个对象,你的目标是通过管理对象图。你想确保:在内存中没有比实际需要的还多的对象。
概述
Objective-C提供两种内存管理的方法:1.”manual-release“(MRR),需要显式管理内存通过跟踪对象的所有权。MRR基于NSObject类在运行时提供的引用计数实现的。
2.”Automatic Reference Counting“ARC,系统使用相同的引用计数基于MRR,但是在编译时,为开发者适当插入一些内存管理方法。强烈建议开发者在新项目中使用ARC。使用ARC就无需理解本文所描述的内容了。
防止内存相关问题的好的做法
两个主要的内存管理误用问题1.释放或覆盖正在使用的数据。
这将造成内存损坏,造成应用程序崩溃,或者更坏的情况是损坏用户数据。
2.没有释放数据,导致内存泄露。
泄漏导致应用程序的内存使用量逐渐增加,这反过来又可能会导致系统性能较差或者应用程序被终止(crash)
引用计数内存管理的角度思考,但是,往往是适得其反,因为你往往会考虑内存管理方面的实现细则,而不是在你的实际目标。相反,你应该想到的内存管理对象所有权和对象图的角度。
● Cocoa使用简单的命名惯例来指示,是否拥有函数返回的对象。点击查看内存管理策略
● 尽管内存管理基本策略很简单,有一些实际的步骤,你可以使内存管理更轻松,有助于确保你的程序仍然可靠和稳定的,而在同一时间最大限度地减少资源需求。点击查看内存管理实践
● Autorelease pool 提供一种机制:让对象延迟release。这个对你想放弃所有权,但又想避免立即释放(比如函数的返回值)。有些时候,你可能会使用自己的autorelease池块,点击查看自动释放池
使用分析工具来调试内存问题
在编译时候找出代码的问题。使用Xcode内嵌的Clang Static Analyzer如果内存管理的问题仍然发生,还有其他的工具和技术,你可以用它来识别和诊断问题。
● 多数工具和技术都在TN2239中有描述,iOS Debugging Magic 特别是NSZombie来帮助找到过度释放对象。
● 使用Instruments来追踪引用计数事件并找到内存泄露。( 参考
Collecting Data on Your App待翻译)
( 点击查看原文地址)
相关文章推荐
- [iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)
- iOS Threading编程指南 官方文档翻译第一篇(序言)
- iOS开发-Swift4译文Swift4官方文档中文版/ Basic Operators(上)(转载)
- human-interface-guidelines_IOS人机交互指南_官方文档翻译_1.1概况_主题
- (apple官方文档译文)ios应用开发当中的表视图
- 《ios人机交互指南翻译系列之一,来自苹果最新官方文档,2015.8》 设计策略:把概念变成产品
- App开发架构指南(谷歌官方文档译文)
- 《iOS高级内存管理编程指南》学习笔记
- human-interface-guidelines_IOS人机交互指南_官方文档翻译_1.2概况_接口要点
- Mac OS, iOS多线程开发指南,apple官方文档翻译稿
- 官方文档 恢复备份指南五 Configuring the RMAN Environment
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
- Protocol Buffers官方文档(开发指南)
- reactor官方文档译文(2)Reactor-core模块
- Repo命令指南(翻译自官方文档)
- iOS - apple官方ARC文档关键点摘录
- ES权威指南[官方文档学习笔记]-8
- ES权威指南[官方文档学习笔记]-32 Checking whether a document XX
- ES权威指南[官方文档学习笔记]-16 Analytics
- Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南