簡體   English   中英

iPhone內存泄漏問題

[英]Problem with iPhone memory leaking

我繼承了一段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;

}

被標記為泄漏的部分是第一行。 如您所見,我一直在“釋放”在那里的各個項目,以查看是否有任何不同。 我認為應該自動釋放路徑變量。 但是,事實並非如此。

那么誰能告訴我我在做什么錯以及如何消除這種內存泄漏?

您不應釋放路徑對象和documentsDirectory對象,因為未分配它。 閱讀有關釋放對象的以下文檔

如果使用以下代碼,則可以釋放它;

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

我的線程中缺少NSAutoreleasePool,這就是導致我的泄漏的原因:( D'oh。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM