2010-02-18 2 views
0

내 앱이 제대로 작동하고있어 정상적으로 보입니다. 하지만 인스 트루먼 트와 함께 실행 한 후에는 누수가 발견되었습니다. 아래의 코드처럼 여러 가지 문제가있는 것 같습니다. 코드에 문제가 있습니까? 어떤 한 단어라도 도움이 될 것입니다.initWithContentsOfFile에 누출 문제가 발생했습니다.

@interface GameData : NSObject 
{ 
    NSDictionary* _data; 
    NSDictionary* _localData; 
} 
@end 

@implementation GameData 

- (id) init 
{ 
    NSString* dataFilename = [[NSBundle mainBundle]pathForResource:@"GameData" ofType:@"plist"]; 
    _data = [[NSDictionary alloc]initWithContentsOfFile:dataFilename]; // Leaks 48 bytes 

    NSString* localDataFilename = [[NSBundle mainBundle]pathForResource:@"GameData-Local" ofType:@"plist"]; 
    _localData = [[NSDictionary alloc]initWithContentsOfFile:localDataFilename]; 

    return self; 
} 

- (void) dealloc 
{ 
    [_data release]; 
    [_localData release]; 

    [super dealloc]; 
} 

@end 

답변

4

일부 작업으로 인해 절대로 공개되지 않는 정적 데이터 구조가 프레임 워크에 저장 될 수 있습니다. 예를 들어, -initWithContentsOfFile: 구현은 성능 최적화를 위해 앱이 종료 될 때까지 처음 사용할 때 내부 설정을 구성 할 수 있습니다. 이것은 실제 누수가 아니지만 누출 감지 소프트웨어는 때때로 누수 감지기로 표시합니다. 프레임 워크 자체에 메모리 누수가 발생하는 버그가있을 수도 있지만, 특히 NSDictionary와 같이 잘 설정된 클래스의 경우에는 드물습니다.

당신의 코드가 새어 나오고있는 것은 아닙니다. 내가 말할 수있는 한 정확합니다. 귀하의 -dealloc 메쏘드가 호출되고 있다면 (로그 문을 추가하십시오) 계약의 일부를 이행하고 누출은 귀하의 잘못이 아닙니다.

ObjectAlloc 인스트루먼트를 사용할 가치가 있습니다. 오브젝트가 할당되고 매달려 있는지 더 잘 이해할 수 있습니다.

관련 문제