I've run into a leak when trying to load saved custom objects from NSUserDefaults. Here is the code that's the culprit. Does anyone see anything that's clearly wrong?
@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];
}
This is also listing as a leak in 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];
}
}