2010-02-15 13 views
2

Regardez la méthode suivante:pourquoi ne devrais-je pas libérer cette chaîne?

-(void)updateProfile:(Profile *)profile WithJSON:(NSString *)JSON; 
{ 
    SBJSON *parser = [[SBJSON alloc] init]; 
    NSDictionary *object = [parser objectWithString:JSON error:nil]; 

    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setPositiveFormat:@"#,##0"]; 

    profile.displayName = [object valueForKey:@"displayName"]; 
    profile.profileURL = [object valueForKey:@"profileURL"]; 

    NSString *rep = [object valueForKey:@"reputation"]; 
    profile.reputation = [[nf numberFromString:rep] intValue]; 
    //[rep release]; <-Why not release? 

    [nf release];   
    //[object release]; <-Why not release? 
    [parser release]; 
} 

Je l'ai commenté deux lignes, ce qui me donne EXC_BAD_ACCESS sinon.
Quelqu'un peut-il m'expliquer pourquoi il est faux de libérer ces objets?

Répondre

14

Vous ne devriez pas le libérer parce que vous n'avez pas +alloc, -retain, ou -copy il. Les constructeurs de commodité tels que +objectWith… renvoient des objets auto-libérés.

+0

Merci! Sensationnel. C'était plutôt évident ... Et cela a résolu certains problèmes que je pensais provenir de RegexKitLite-framework, aussi. Un jour, je vais l'obtenir. J'espère ... – Vegar

5

La meilleure question à poser est: Pourquoi devrait vous le libérer? Qu'avez-vous fait pour revendiquer la propriété de l'objet? La réponse dans ce cas est "rien". Puisque vous ne le possédez pas, vous ne pouvez pas très bien le libérer.

+1

Devine que je dois arrêter de détruire la propriété des autres mans ... Merci. – Vegar