NSUserDefaults에서 저장된 사용자 지정 개체를로드하려고 할 때 누수가 발생했습니다. 범인의 코드는 다음과 같습니다. 분명히 잘못된 것을 본 사람이 있습니까? 사용자 개체의 decodeObjectForKey에 대한 메모리 누수
@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];
}
이
또한이에서 악기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];
}
}
덕분에 나는 그 기능을 켜고 좀 더 의미있는 정보를 찾을 수 있는지 보자 : 나는 또한 당신의 CustomQuery.m 방법을 반영하기 위해 변경하려고 할 것입니다. – aahrens
더 자세히 살펴본 후 나는 명백한 오류를 놓쳤다. oldSavedArray를 초기화하는 위의 코드는 내 viewDidLoad 메서드와 viewWillAppear 메서드에서 모두 사용되었습니다. 도움을 주셔서 감사합니다 – aahrens