为什么我在UIApplication中有内存泄漏

时间:2010-05-13 22:27:34

标签: iphone objective-c xcode memory-management

我有一个iPhone应用程序项目。我用仪器内存泄漏工具分析了它。根据仪器,我有2个泄漏,Trace如下:

start main UIAplicationMain _run CFRunLoopInMode CFRunLoopRunSpecific PurpleEventCallback _UIAplicationHandleEvent sendEvent: handleEvent:withNewEvent:

在此跟踪之后,有两个单独的跟踪。是什么导致这种情况以及如何解决?

编辑: 根据仪器泄漏在第二行

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil); //leak
[pool release];
return retVal;

2 个答案:

答案 0 :(得分:0)

你错过了线程的NSAutoReleasePool吗?

第二种方法看起来像是由另一个组件或系统线程调用的某种回调。

在实现中,在顶部创建NSAutoReleasePool并在方法完成时释放它:

void MyCallback {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  // do stuff
  [pool release];
}

答案 1 :(得分:0)

这可能是误报。 UIApplicationMain可能会创建一些对象,这些对象只要应用程序存在就会挂起,因此永远不会发布它们。