J'ai rencontré une fuite lorsque j'ai tenté de charger des objets personnalisés enregistrés à partir de NSUserDefaults. Voici le code qui est le coupable. Est-ce que quelqu'un voit quelque chose qui est clairement faux?Fuite de mémoire pour decodeObjectForKey dans l'objet personnalisé
@interface CustomQuery : NSObject <NSCoding> {
NSString *theTitle;
NSString *query;
}
@property(nonatomic, retain) NSString *theTitle;
@property(nonatomic, retain) NSString *query;
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
//tempTitle is leaking
NSString *tempTitle = [[aDecoder decodeObjectForKey:@"QueryTitle"] retain];
self.theTitle = tempTitle;
[tempTitle release];
//tempQuery is leaking
NSString *tempQuery = [[aDecoder decodeObjectForKey:@"QueryValue"] retain];
self.query = tempQuery;
[tempQuery release];
}
return self;
}
- (void)dealloc {
[theTitle release];
[query release];
[super dealloc];
}
C'est aussi dans la liste comme une fuite dans Instruments
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedQueries"];
if (dataRepresentingSavedArray != nil)
{
//This is Leaking in Instruments
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
if (oldSavedArray != nil) {
//tempCustomQueryArray is also leaking
NSMutableArray *tempCustomQueryArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
if (savedQueries != nil) {
savedQueries = nil;
}
self.savedQueries = tempCustomQueryArray;
[tempCustomQueryArray release];
}
}
Merci pour l'aide, je vais activer ces fonctionnalités et voir si je peux trouver des informations plus significatives. – aahrens
Après avoir regardé plus en détail, j'avais raté une erreur évidente. Le code ci-dessus qui initialisait oldSavedArray était à la fois dans ma méthode viewDidLoad et dans la méthode viewWillAppear. Merci pour votre aide – aahrens