1

我需要了解如何在目标 C 中管理内存。我知道基础知识,如果您创建并拥有它,则必须自己释放它。但是,当涉及到以下代码时:

self.storeDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath2];

我拥有这个吗?我必须释放这段记忆吗?

self.storeDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath2]; 
//73.3% leak   
totalCharacters = [storeDict count];
tagCounter = 1;

dictKeyArray = [[storeDict allKeys] mutableCopy];
//13.3% leak

当 Instruments 在突出显示的泄漏旁边放置一堆百分比时,这告诉我什么?它是否告诉我泄漏的大小相对于泄漏的内存总量?
最后一件事..分配的内存量持续增加是否正常?还是应该稳定在某个地方?感谢所有的帮助!一切都非常感谢!

4

1 回答 1

2

在大多数情况下,您只拥有名称以“alloc”、“new”、“copy”或“mutableCopy”开头的方法返回的对象。当然,您还拥有您发送的任何东西-retain。这些规则的例外情况应在不合格方法的文档中注明。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-SW1

Instruments 将泄漏归因于创建对象的行。但是,这不一定是泄漏对象的代码。如果指向对象的指针被传递给其他代码并且该代码没有平衡其保留和释放,则该代码负责泄漏。Instruments 可以向您显示特定对象的保留和释放历史,您必须查看这些以查看哪些代码没有正确履行其所有权责任。

此外,如果一个对象由另一个对象拥有并且它确实是第二个对象被泄露,那么它所拥有的所有东西都将“传递地”泄露。因此,在尝试追踪已泄漏的低级别对象之前,请先查找已泄漏的高级对象。通常,泄漏实例较少的对象是泄漏对象图的根。

记忆力持续上升还是趋于稳定是正常的,这取决于一点。通常,内存使用应该稳定。但是,如果您的应用程序确实做得越来越多,那么它的内存使用量不断增加可能是正常的。例如,如果一个应用程序通过网络接收数据并在此过程中累积结果,那么随着更多数据的到达,它的内存使用量可能会增加。但如果它没有在某个合理的点停止,那就是个问题。在 iOS 设备上,系统最终会杀死它。

于 2012-06-04T21:17:41.660 回答