2010-05-13 79 views
0

我有一个iphone应用程序项目。我使用仪器内存泄漏工具分析了它。根据仪器我有2个泄漏跟踪如下:为什么我在UIApplication中有内存泄漏

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

是否缺少的线程NSAutoReleasePool

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

在实现中,创建一个NSAutoReleasePool在顶部和释放时的方法完成:

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

当我第一次创建项目(基于窗口的应用程序模板)时,我使用了创建的main.m。根据文书其是在第二行中的泄漏: NSAutoreleasePool *池= [[NSAutoreleasePool的alloc] INIT]; int retVal = UIApplicationMain(argc,argv,nil,nil); [游泳池释放]; return retVal; – user339744 2010-05-13 23:06:26

0

这可能是假阳性。 UIApplicationMain可能会创建一些对象,只要应用程序存在,它就会一直存在,因此永远不会释放它们。

相关问题