根據儀器分析,我在這裏有內存泄漏 - 並且 - 我不確定如何正確釋放我創建的scoresArray對象。正在釋放一個數組對象
此代碼確實工作正常,除了泄漏。我稍後在代碼中釋放highScoresArray對象 - 但試圖釋放scoresArray殺死應用程序。我認爲當我發佈highScoresArray時,我會釋放scoresArray,因爲它們都指向內存中的相同位置。如果任何人都可以指出我的思想存在缺陷,那會很好。
- (void) readScoresFile {
// Read the Scores File, if it exists
NSString *filePath = [self scoresFilePath];
// Only load the file if it exists at the path
if ([[NSFileManager defaultManager] fileExistsAtPath: filePath]) {
scoresFileExistsFlag = YES;
NSLog(@"SCORES FILE EXISTS - THEREFORE LOAD IT");
NSMutableArray *scoresArray = [[NSMutableArray alloc] initWithContentsOfFile: filePath];
highScoresArray = scoresArray;
} else {
scoresFileExistsFlag = NO;
NSMutableArray *scoresArray = [[NSMutableArray alloc] init];
highScoresArray = scoresArray;
// No Scores File exists - we need to create and save an empty one.
int counter = 1;
while (counter <= 5) {
// Set up a date object and format same for inclusion in the Scores file
NSDate *now = [[NSDate alloc] init];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy.MM.dd"];
NSString *theDateNow = [dateFormat stringFromDate:now];
// Add the score data (Score and User and date) to the runScoreDataDictionary
runScoreDataDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:0], @"score",
[NSNumber numberWithInt:0], @"landings",
currentUser, @"user",
theDateNow, @"date", nil];
//NSLog(@"Dictionary contains: %@", runScoreDataDictionary);
// Add the dictionary to the highScoreArray
[highScoresArray addObject:runScoreDataDictionary];
//NSLog(@"OBJECTS in ARRAY: %i", [highScoresArray count]);
[self writeScoresFile]; // Write the empty scores file to disk
[now release];
[dateFormat release];
++counter;
//[scoresArray release]; // TESTING TO SEE IF THIS KILLS - YES KILLS
}
}
}
是的 - highScoresArray是一個實例變量 - 我已經消除了多餘的scoresArray - 感謝您的輸入。 – ReachWest 2010-02-23 21:44:31