我继承了一段Objective-C代码,泄漏跟踪工具已经识别出代码中的内存泄漏。我不完全了解Objective-C的内存跟踪规则,所以我对理解内存泄漏的原因有一个真正的问题。代码如下:
+ (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;
}
标记为泄漏的部分是第一行。如你所见,我一直在玩“释放”的各种项目,看看是否有任何区别。我认为它应该自动释放路径变量。然而,情况似乎并非如此。
那么有人能告诉我我做错了什么以及如何消除内存泄漏吗?