2010-12-04 10 views
0

J'utilise une petite classe pour conserver les paramètres utilisateur sur le disque. Quand je lance l'outil des fuites, il est dit que je perds de la mémoire dans les affectations ci-dessous. Si je les libérer dans dealloc, les instruments se tait, mais l'application commence (objets qui se brisent overreleased?)Instruments dit fuite de mémoire dans decodeObjectForKey

@synthesize location,address; 

// Decode an object from an archive 
- (id)initWithCoder:(NSCoder *)coder 
{ 
    //location & address are defined like 
    //@property(nonatomic, retain) NSString* location 
    self.location = [coder decodeObjectForKey:@"location"]; 
    self.address = [coder decodeObjectForKey:@"address"]; 

    return self; 
} 

//If I uncomment below lines, Instruments is happy but the app immediately crashes (I am guessing over released objects ?) 
- (void)dealloc { 
    [super dealloc]; 
/* 
    [self.location release]; 
    [self.address release]; 
*/ 
} 

Répondre

0

Vous devez les libérer dans le dealloc. Le paramètre auto.location signifie que vous accédez à une propriété via un accesseur de propriété (généré). Vous devriez plutôt les mettre à zéro, ou libérer les ivars directement.

Donc, utilisez [release]; au lieu de [release auto.location];

Ou bien, utilisez self.location = nil;