我有一块Objective-C代码,我已经继承,漏洞跟踪工具已经在代码中识别出内存泄漏。我并不完全了解Objective-C的内存跟踪规则,所以我在理解内存泄漏的原因时遇到了一个实际问题。代码如下:iPhone内存泄漏的问题
+ (NSString *) getRecordingsDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *tmpRecordingsDirectory = [documentsDirectory stringByAppendingPathComponent: @"Recordings"];
NSFileManager* fileManager = [[NSFileManager alloc] init];
BOOL result;
if ([fileManager fileExistsAtPath:tmpRecordingsDirectory isDirectory:&result] == FALSE)
{
NSError* error;
[[NSFileManager defaultManager] createDirectoryAtPath: tmpRecordingsDirectory withIntermediateDirectories:TRUE attributes:nil error:&error];
// TODO - handle error return
}
[fileManager release];
[documentsDirectory release];
[paths release];
return tmpRecordingsDirectory;
}
被标记为泄漏的部分是第一行。正如你所看到的,我一直在玩“释放”那里的各种物品,看看它是否有任何区别。我认为它应该自动释放路径变量。但是,这似乎并不是这种情况。
因此,任何人都可以告诉我我做错了什么,以及如何消除这种内存泄漏?
我是知道的......但我是在救命稻草。)我”但我发现了我的问题的来源。原来你创建一个单独的线程时需要创建一个NSAutoreleasePool :( – Goz 2010-10-11 10:52:18