Lorsque je compile avec l'analyseur, j'obtiens quelques messages. J'ai ces propriétés ont déclaré:Messages "Décrément incorrect" et "Fuite potentielle" de l'analyseur
@property (nonatomic, retain) SyncServicePrimary *syncAndCartOne;
@property (nonatomic, retain) SyncServiceSecondary *syncAndCartTwo;
Cette méthode est appelée à partir applicationDidBecomeActive
et je reçois « fuite potentielle d'un objet alloué ».
-(void)makeTheCartObjectsForCountry:(NSString*)country_key{
self.syncAndCartOne = [[SyncServicePrimary alloc] init];
self.syncAndCartTwo = [[SyncServiceSecondary alloc] init];
}
Ceci est appelé dans applicationWillResignActive
; ici je reçois "Décrément incorrect du compte de référence d'un objet".
-(void) removeTheCartObjects{
[self.syncAndCartOne release];
self.syncAndCartOne = Nil;
[self.syncAndCartTwo release];
self.syncAndCartTwo = Nil;
}
Si je mets les objets à autorelease
, l'erreur disparaît, mais je veux que les objets soient libérés lorsque l'application se cache.
Est-ce que c'est quelque chose que je fais bien mais qui est divisé trop loin pour que l'analyseur voit le début et la fin, ou est-ce quelque chose que je peux faire mieux pour ne pas me plaindre?
Il est plus que probable que je manque un concept simple en ce qui concerne release
et alloc
cycles (je viens de PHP et C#).
Notez que 'Nil' est le littéral NULL pour les pointeurs de classe. Pour les pointeurs d'objet, vous devriez utiliser 'nil' à la place. –
bon à savoir, merci. –
Juste pour le conduire à la maison, si je fais un contrôle nul sur une instance d'une classe; l'utilisation d'un "== Nil" n'est pas la même chose que "== nil"? –