2010-11-23 24 views
1

J'ai une fuite dans le code suivant:NSCoding problème de fuite avec initWithCoder

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super init]) { 
     self.Tag = [aDecoder decodeObjectForKey:KEY_TAG]; 
     self.ParentTag = [aDecoder decodeObjectForKey:KEY_PARENT_TAG]; 
     self.Order = [aDecoder decodeObjectForKey:KEY_ORDER]; 
     self.OrderFavorite = [aDecoder decodeObjectForKey:KEY_ORDER_FAVORITE]; 
     self.isFavorite = [aDecoder decodeObjectForKey:KEY_IS_FAVORITE]; 
     self.isPurchased = [aDecoder decodeObjectForKey:KEY_IS_PURCHASED]; 

     self.Titel = [aDecoder decodeObjectForKey:KEY_TITEL]; 
    } 
    return self; 
} 

La fuite apparaît dans les instruments de l'appareil dans cette ligne:

self.Titel = [aDecoder decodeObjectForKey:KEY_TITEL]; 

KEY_TITEL est:

#define KEY_TITEL @"Titel" 

et auto.Titel est:

@property (nonatomic, retain) NSString *Titel; 

il est synthétisé et il est libéré en dealloc.

Je n'ai aucune idée d'où vient la fuite. Pouvez-vous me aider ... s'il vous plaît

merci xnz

Répondre

0

Do avez-vous d'attribuer une valeur à Titel avant initWithCoder exécution? Peut-être en super classe? La fuite ne semble pas être liée à l'exécution initWithCoder, mais à une affectation précédente.

+0

Si je ne trouve pas l'objet archivé, je l'attribue à un dictionnaire. Mais si je le fais, initWithCoder n'est pas appelé. Superclasse est NSObject, donc je ne l'ai pas assigné là. – xnz

3

Vous interprétez mal ce que les Instruments vous disent.

Il est pas vous indiquant où vous avez fui un objet.

indique où vous avez créé un objet qui a finalement été divulgué. Réanalyser les données à partir d'Instruments en conséquence. (Un appel [Titel release] est probablement manquant dans votre méthode -dealloc)