2010-04-19 6 views
2

Juste une question rapide de gestion de la mémoire si je peux ... Est-ce que le code ci-dessous est ok, ou devrais-je faire une retenue et autorelease, j'ai le sentiment que je devrais. Mais selon les règles unarchiveObjectWithFile ne contient pas new, copy ou alloc.unarchiveObjectWithFile conserve/autorelease nécessaire?

-(NSMutableArray *)loadGame { 
    if([[NSFileManager defaultManager] fileExistsAtPath:[self pathForFile:@"gameData.plist"]]) { 
     NSMutableArray *loadedGame = [NSKeyedUnarchiver unarchiveObjectWithFile:[self pathForFile:@"gameData.plist"]]; 
     return loadedGame; 
    } else return nil; 
} 

ou

-(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; 
    } 

Répondre

4

Vous avez raison dans ce unarchiveObjectWithFile retourne un objet autoreleased, car il ne contient pas new, copy ou alloc.

est ici une version qui réécrites légèrement pour utiliser le formatage Objective-C communs idiomes:

- (NSMutableArray *)loadGame { 
    NSString *gameDataPath = [self pathForFile:@"gameData.plist"]; 
    if([[NSFileManager defaultManager] fileExistsAtPath:gameDataPath]) { 
     return [NSKeyedUnarchiver unarchiveObjectWithFile:gameDataPath]; 
    } 
    return nil; 
} 
+0

Un grand merci Nick, je vous remercie également pour les pointeurs sur la mise en forme correcte. Très appréciée. – fuzzygoat