0

获取内存泄漏对象NSDate和负责库是 UIKit 负责框架是UIApplication:sendAction:to:from:forEvent:为什么会这样。我该如何解决这个内存泄漏。我根本没有使用界面生成器。一切都以编程方式完成

Event Type  Responsible Library Responsible Caller
Malloc      UIKit                   [UIApplication sendAction:to:from:forEvent:]
Autorelease UIKit                   [UIApplication sendAction:to:from:forEvent:]
Retain      UIKit                   [UIApplication sendAction:to:from:forEvent:]
Release     Foundation           [NSAutoreleasePool release]

谢谢

4

1 回答 1

3

如果 Instruments 说负责的库是 UIKit,请不要介意。这仅意味着内存的实际分配是在 UIKit 内部完成的,但我几乎可以肯定泄漏的责任在您的代码中。这几乎是我对 Instruments/Xcode 发现的内存泄漏的经验,负责任的库是 SDK 框架。

我的建议是检查您分配的 NSDate 并确保它们都已发布。有时,泄漏的对象仅与 Instruments 报告的类型间接相关。

最后,发现泄漏原因的最有效方法是检查仪器向您显示泄漏时执行的代码(您使用的是哪个视图?哪个任务?等等)

恐怕没有看到你的代码,就不能说更精确了。

编辑:

查看您的代码,我建议您检查执行时会发生什么:

pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];

如果pauseStart正在引用一个对象,那么像这样分配给它会产生泄漏,因为您丢失了对前一个对象的引用;你可以这样做:

[pauseStart release];
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];

或更好

self.pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];

(我在这里假设pauseStart是一种保留属性)。

希望这可以帮助。

于 2012-06-27T17:20:34.823 回答