iPhone内存泄漏问题

时间:2010-10-11 09:36:42

标签: iphone objective-c memory-leaks

我有一段我继承的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;

}

被标记为泄漏的部分是第一行。正如你所看到的,我一直在玩“释放”那里的各种物品,看看它是否有任何区别。我认为它应该自动释放路径变量。但是,情况似乎并非如此。

那么有谁能告诉我我做错了什么以及如何消除这种内存泄漏?

2 个答案:

答案 0 :(得分:2)

您不应该释放paths对象和documentsDirectory对象,因为您没有分配它。在释放对象时阅读以下documentation

如果您使用以下代码,则可以将其释放;

NSArray *paths = [[NSArray alloc] initWithArray:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)];
NSString *documentsDirectory = [[NSString alloc] initWithFormat:@"%@", [paths objectAtIndex:0]];

答案 1 :(得分:0)

我的线程中缺少一个NSAutoreleasePool,这是导致我泄漏的原因:( D'哦。