泄漏NSFileManager contentsOfDirectoryAtPath

时间:2011-03-29 10:36:32

标签: iphone objective-c memory memory-leaks

在“checkFiles”方法中,我只搜索了一个NSDocumentDirectory路径并请求了文件列表。

- (void) checkFiles{
        NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *path = [pathList objectAtIndex:0];

        NSArray *dirArray = [myFileManager contentsOfDirectoryAtPath:path error:NULL]; // leak occurs here!

        /* .... */
}

-

-

Leaks Instruments检测NSFileManager的contentsOfDirectoryAtPath方法泄漏。

当我点击Instruments中名为NSCFString的泄漏对象时,这是堆栈跟踪。

   0 CoreFoundation __CFAllocatorSystemAllocate
   1 CoreFoundation CFAllocatorAllocate
   2 CoreFoundation _CFRuntimeCreateInstance
   3 CoreFoundation __CFStringCreateImmutableFunnel3
   4 CoreFoundation CFStringCreateWithBytes
   5 Foundation -[NSFileManager directoryContentsAtPath:matchingExtension:options:keepExtension:error:]
   6 Foundation -[NSFileManager contentsOfDirectoryAtPath:error:]

因为我经常调用“checkFiles”方法来更新包含文件列表的UITableView,所以我无法避免这种泄漏。

我该如何修复这种系统泄漏?

谢谢。

1 个答案:

答案 0 :(得分:2)

你确定dirArray没有被保留在某个地方吗?也许是伪装,比如作为参数传递给另一种方法?

如果您想进行半自动检查,请使用Instruments'Leaks工具检查您发送的所有保留/释放消息(直接或间接)并检查每个消息。