2009-07-17 77 views
1

我跑在执行以下操作的iPhone应用程序:removeItemAtPath中的内存泄漏:错误:?

+ (void)performWrite:(NSData *)data { 
    [data retain]; 
    [data writeToFile:@"WriteTest.tst" atomically:YES]; 
    [[NSFileManager defaultManager] removeItemAtPath:@"WriteTest.tst" error:NULL]; 
    [data release]; 
} 

当仪器运行,但是,我看到在每次调用removeItemAtPath:error泄漏,具有以下跟踪到内部泄漏:

9 MyApplication +[StorageUtil performWrite:] 
    8 Foundation -[NSFileManager removeItemAtPath:error:] 
    7 Foundation +[NSFilesystemItemRemoveOperation filesystemItemRemoveOperationWithPath:] 
    6 Foundation -[NSOperation init] 
    5 CoreFoundation +[NSObject new] 
    4 CoreFoundation +[NSObject alloc] 

此堆栈跟踪被设置为两者的NSRecursiveLock的泄漏源,以及_NSOperationData对象的。所以我想知道的是我是否不正确地使用removeItemAtPath:error:方法,或者是否确实存在泄漏。我想我会在将它提交给雷达之前在这里检查。

请注意,data参数正确地遵守此方法调用之外的保留/释放循环。我不相信这是泄漏的根源。

回答

1

该函数在一个单独的线程中调用(使用pthread_create()创建),因此不包含在NSAutoreleasePool中。在方法调用之前创建池并将其排干之后,会处理泄漏。