我有一个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;
答案 0 :(得分:0)
你错过了线程的NSAutoReleasePool
吗?
第二种方法看起来像是由另一个组件或系统线程调用的某种回调。
在实现中,在顶部创建NSAutoReleasePool
并在方法完成时释放它:
void MyCallback {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// do stuff
[pool release];
}
答案 1 :(得分:0)
这可能是误报。 UIApplicationMain可能会创建一些对象,这些对象只要应用程序存在就会挂起,因此永远不会发布它们。