我只使用Java和Ruby很长时间以至于我真的不喜欢再次跟踪自己的记忆。这不是我不能做到的,我可以。我只是不想。
任何特殊的技巧,库,或者你在iApps中处理内存所学到的任何其他东西,都在我这里。
答案 0 :(得分:5)
这真的非常非常容易。不要担心保留计数,并且为了善良,永远不要在对象上调用“retainCount
”方法。这没用。
如果您在名称中的任何位置调用“alloc”,“new”或“copy”方法,或者调用“retain
”方法,则您拥有该对象。当你完成所有权后,你有责任放弃这种所有权。
要做到这一点,如果您仍然需要返回对象的引用,请调用“release
”,如果您需要,则调用“autorelease
”。
documentation on the subject毫不含糊。这并不难。
答案 1 :(得分:3)
我强烈建议Beginning iPhone Development: Exploring the iPhone SDK。
另一个需要关注的重点是获得Clang Static Analyzer设置。它分析您的代码,可以捕获许多常见的内存泄漏以及潜在的逻辑问题。 Apple已大量为此分析仪做出贡献,并希望将其集成到X-Code的未来版本中;)
答案 2 :(得分:2)
这是一种痛苦。我要说的是,在你编写每一段重要的代码后,最重要的习惯是运行内存工具,至少在你了解事情是如何工作的之前。
确保在设备上运行它,而不是模拟器。两者处理一些内存情况的方式不同。
此外,如果您在系统缓存资产时发现内存使用率上升,请不要感到惊讶。如果我没记错的话,我花了很多时间试图弄清楚为什么位图不会消失。我不再使用它了,但操作系统认为在内存不足之前缓存它可能是一个好主意。
这是关于iPhone内存管理方式的great blog post。那里有一些好主意。
答案 3 :(得分:2)
这并不是那么困难。这里有一些经验丰富的经验法则。
这些都是非常粗略的经验法则,我确信每个人都可以提出这些规则的例外情况,但这些规则对于让你以正确的方式分配和释放内存大有帮助。
在剩下的时间里,经常使用Leaks仪器运行代码。解决问题,因为你找到了它们。现在修复它比在一个月内修复它要容易得多,因为你不记得为什么你这样编写代码。
最后......这种情况很少见,但Apple代码有时会泄漏。 Leaks仪器应该准确地告诉您泄漏的是什么。如果它看起来不像你正在做的事情,它可能不是。作为一个具体的例子:iPhone的核心数据泄漏少量的RAM(我认为)创建一个新的ManagedObjectContext。不过,当你进行取物时,我可能不记得了。
答案 4 :(得分:1)
忘记这一切,不要费心阅读任何人的评论/答案,只需阅读非常简单的Memory Management Rules。为了天堂,它只有十几个句子,你可以在一分钟内阅读。
答案 5 :(得分:0)
我还没有这样做,但我知道Mono已被移植到iPhone上,这意味着你可以用.Net(C#,VB.Net等)编写iPhone应用程序,而不必担心内存管理。
答案 6 :(得分:0)
他们刚刚在这个
上有一个Dot Net Rocks节目http://www.dotnetrocks.com/default.aspx?showNum=454
他们提到了mono项目以及Objective C 2.0将具有更好的内存管理功能的事实。除此之外,它很糟糕。
编辑:修复了错误的拼写错误
答案 7 :(得分:0)
从Java或Python(我做过)来看可能很尴尬,但是一旦你习惯它,它就很自然了。您拥有使用alloc
或copy
创建的对象,并且必须释放它们,否则不会释放它们。大多数情况下,您将创建自动释放的对象(集合,字符串)。