2009-12-19 3 views
2

이 코드에 문제가 있습니다. 디버그 환경에서 작동합니다. 악기에 나는이 기능에 메모리 누수 문제를보고하고있어, 악기는NSKeyedUnarchiver 메모리 누수 문제

범주 이벤트 유형 타임 스탬프 주소 크기 책임 도서관 책임 발신자 27 SocialNetwork의 malloc 00 경고주고있다 : 19.951 0x3d64d20 80 재단 - [NSKeyedUnarchiver _decodeArrayOfObjectsForKey을 :]

- (NSMutableArray *)GetDataInstanceToUserDefaults{ 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *storedObject = [userDefaults objectForKey:@"MyDataKey"]; 
NSMutableArray *data; 

if(storedObject != nil) 
{  
    NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:storedObject]; 
    if(savedArray != nil) 
     data = [[NSMutableArray alloc] initWithArray:savedArray]; 
    else 
     data = [[NSMutableArray alloc] init]; 
}else{ 
    data = [[NSMutableArray alloc] init]; 
} 
return data; 

}

내가 내 문제 어디 이해하지 못했다?

는 지원

편집 주셔서 감사합니다 : 그런데 나는 (당신이 볼 수 있듯이),이 문제에 대해이 기능을 자세한 내용을 제공해야 내 객체를 저장한다. 내 객체는 사용자 정의 클래스이며 NSMutableArray에 저장합니다.

나는 이미 내가 문제가 사용자 정의 클래스의 initWithCoder: 방법에 가능성이 높습니다 생각하는 내 사용자 정의 클래스

-(void)encodeWithCoder:(NSCoder *)coder{ 
-(id)copyWithZone:(NSZone*)zone { 
-(id)initWithCoder:(NSCoder *)coder{ 

답변

1

의 내부에 이러한 방법을 추가했습니다. 누출되었지만 분석기가 아카이버에 있다고보고합니다.

문제와 관련이 없으므로 [[NSMutableArray alloc] init]을 사용하여 컬렉션, 특히 변경 가능한 컬렉션을 초기화하지 않도록주의해야합니다. 대신 [[NSMutableArray alloc] initWithCapacity:1]을 사용하십시오. 을 사용하여 이상한 문제가 발생하여 initWithCapacity을 사용하여 문제를 해결했습니다.

+0

TechZen 신속한 답변을 다시 보내 주십시오. 그래서, 내 문제를 해결하기 위해 무엇을해야합니까? – fyasar

+2

TechZen 후 stackoverflow 연구, 스테판 폰 Chossy 내 문제와 관련된 답변을 준, 누군가가 나와 같은 문제가 있다면, 여기를보십시오 : http://stackoverflow.com/questions/537044 저장/- 주문 개체 인-AN-NSMutableArray를 인 - nsuserdefaults 맞춤 클래스/751,749 # 751,749 는 사용해야 - (ID) initWithCoder (NSCoder *) 코더 { \t 자기 = 슈퍼 INIT] ; 대신 ; - (id) initWithCoder : (NSCoder *) 코더; { self = [[CustomObject alloc] init]; 다시 고맙습니다. – fyasar

+1

@fyasar 답안으로 답안을 올리십시오. 위로 올려주세요. 'self = [[MyObject alloc] init]'에서'self = [super init]'로 전환하면 실제로 Instruments에서 프로파일 링에 의해보고 된 누출을 해결할 수 있습니다. – Palimondo