1

分析显示内存泄漏,我在以下代码片段中为 fileB 分配了 filePath 值:

NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];

NSString *filePath = [docsDir stringByAppendingPathComponent:@"/fileA"];

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
    self.propertyA = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
} else {
    //  initialize array with default values and write to data file fileA   
    [self populatePropertyAForFile:filePath];       
}

filePath = [docsDir stringByAppendingPathComponent:@"/fileB"];

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
    self.propertyB = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
} else {
    // initialize array with default values and write to data file fileB

    [self populatePropertyBForFile:filePath];

}

我理解这是因为之前的值(对于 fileA)尚未发布。但我不知道如何阻止这种泄漏。

4

1 回答 1

2

不,filePath 没有任何问题。几乎可以肯定,问题出在您的两个属性propertyApropertyB. 如果它们是保留属性,那么您分配给它们的数组及其内容将会泄漏,因为您拥有您分配的数组并且您没有释放它们。像这样更改行:

self.propertyA = [[[NSMutableArray alloc] initWithContentsOfFile:filePath] autorelease];
                                                                        // ^^^^^^^^^^^ will release ownership of the array
于 2012-07-05T15:37:24.883 回答