如果可以的话,只是一个快速的内存管理问题...下面的代码是否正确,或者我应该进行保留和自动释放,我有应有的感觉。但按照规则,unarchiveObjectWithFile
不包含new
,copy
或alloc
。
-(NSMutableArray *)loadGame {
if([[NSFileManager defaultManager] fileExistsAtPath:[self pathForFile:@"gameData.plist"]]) {
NSMutableArray *loadedGame = [NSKeyedUnarchiver unarchiveObjectWithFile:[self pathForFile:@"gameData.plist"]];
return loadedGame;
} else return nil;
}
要么
-(NSMutableArray *)loadGame {
if([[NSFileManager defaultManager] fileExistsAtPath:[self pathForFile:@"gameData.plist"]]) {
NSMutableArray *loadedGame = [[NSKeyedUnarchiver unarchiveObjectWithFile:[self pathForFile:@"gameData.plist"]] retain];
return [loadedGame autorelease];
} else return nil;
}
最佳答案
您没错,因为unarchiveObjectWithFile
返回一个自动释放的对象,因为它不包含new
,copy
或alloc
。
这是一个稍微重写的版本,以使用常见的Objective-C格式习惯用法:
- (NSMutableArray *)loadGame {
NSString *gameDataPath = [self pathForFile:@"gameData.plist"];
if([[NSFileManager defaultManager] fileExistsAtPath:gameDataPath]) {
return [NSKeyedUnarchiver unarchiveObjectWithFile:gameDataPath];
}
return nil;
}