2010-05-11 3 views
1

J'essaie de tester les fuites de mémoire dans mon iPhone et je n'ai pas beaucoup de chance de se débarrasser de celui-ci. Voici le code qui fuit.Impossible de comprendre comment se débarrasser de la fuite de mémoire


- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate runSync:(BOOL)aRunSync { 
    if (self = [super init]) { 
     self.moc = aMoc; 
     self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc]; 
     self.delegate = aDelegate; 
     calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
     self.runSync = aRunSync; 
    } 

    return self; 
} 

Il fuit sur la ligne self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];.

La variable d'instance self.settingManager est libérée dans la méthode dealloc de la classe.

Je ne sais pas quelle autre information serait pertinente. S'il vous plaît faites le moi savoir et je peux le fournir.

Merci pour toute aide.

-Mark

Voici le fichier d'en-tête.


@interface VacaCalcCalculation : NSObject { 
    NSManagedObjectContext *moc; 
    VacaCalcSettingsManager *settingsManager; 
    id delegate; 
    NSCalendar *calendar; 
    NSDate *nextBankLimitDate; 
    BOOL runSync; 
} 

@property (nonatomic, retain) NSManagedObjectContext *moc; 
@property (nonatomic, retain) VacaCalcSettingsManager *settingsManager; 
@property (nonatomic, retain) id delegate; 
@property (nonatomic, retain) NSCalendar *calendar; 
@property (nonatomic, retain) NSDate *nextBankLimitDate; 
@property (nonatomic) BOOL runSync; 

- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate; 
+0

Je ne suis pas un développeur IPhone, ce qui explique mon manque de connaissances sur le fonctionnement des systèmes, mais il semble que Calendar soit simplement défini sur une nouvelle valeur, et rien n'est fait avec. Peut-être qu'il se passe quelque chose là-bas? – Jay

+0

Affiche les déclarations du fichier d'en-tête pour les variables d'instance. –

Répondre

7

Si votre settingsManager propriété est définie sur retain alors vous êtes en conservant un objet à deux reprises avec la ligne: self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];

Essayez d'ajouter autorelease à la alloc]init ou la création d'une méthode de classe sur VacaCalcSettingsManager qui retourne un objet autoreleased. Sinon, vous pouvez redéfinir votre propriété avec assign afin qu'il ne conserve pas l'objet une seconde fois.

+0

ou simplement attribuer directement à settingsManager au lieu d'appeler [self setSettingsManager:] – drawnonward