2012-04-09 2 views
0

나는 누수 도구를 사용하고있다. 그것은 init 메소드에서 일부 누수가 있다고합니다. NSMutableArray에 누출이 있음을 보여줍니다.init에서 일부 누출이 있습니다. 나는 아무도 누출을 볼 수 없다

누출이 보이지 않습니다.

@interface BookSettings : NSObject 
    @property (nonatomic, retain) NSString *title; 
    @property (nonatomic, retain) NSMutableArray *authors; 
@end 

- (id)init 
{ 
    self = [super init]; 

    if(self) 
    { 
    title   = [[NSString stringWithString:@""] retain]; 
    authors   = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
[title release]; 
[authors release]; 
[super dealloc]; 
} 

답변

2

제공되는 코드는 저자가 균형을 해제하지 않고 유지되는 경우 문제가 다른 곳이다, OK입니다. 누출은 누락 된 릴리스가 있어야하는 곳이 아닌 ivar이 만들어진 장소를 가리 킵니다. 보유 수를 늘린 곳을 모두 확인하십시오.

은 유지 곳, 자료 및 autoreleases 객체 사용 악기 발생을 참조해야하는 경우에에 "레코드 참조 카운트를"로 설정 할당에, 악기의

실행 (당신은 옵션을 설정 녹화를 중지해야). 문제 코드가 실행되고, 녹음을 멈추고, 관심있는 ivar를 검색하고, 드릴 다운하고, 모든 것이 보유, 릴리스 및 자동 회수가 발생한 곳을 볼 수 있습니다.

심각하지에, ARC는 아이폰 OS 4.x를 다시 지원하는 작은 이유가, ARC를 사용하는 것을 고려 BTW

은 :

title = [[NSString stringWithString:@""] retain]; 

더 컴팩트하게 쓸 수있다 :

title= @""; 
+0

일부 라이브러리 (예 : ASIHHTP)를 사용 중이므로 ARC를 지원하지 않습니다. 그래서 ARC를 사용하지 않습니다. – Voloda2

+0

ARC는 파일 단위로 사용할 수 있지만 귀하의 문제를 이해하고 제 3 자 코드는 하나를 다시 보유 할 수 있습니다. – zaph

0

제목의 것 같습니다. 이미, 해당 속성 비 원자 가지고 유지, 그래서 이것은 당신이 한 번 놓아가의 dealloc에서 카운트 2

을 유지하고, 그런 다음 또 다른 유지 지정할 1.

의 수를 유지 감소 의미 retain 수는 1입니다. 문자열을 유지하는이 참조는 누수입니다. 어쨌든 그런 식으로 문자열을 초기화하는 이유 이해가 안

...

+0

예, 간단한 : '제목 = @ "";'모두가 필요하다. – zaph

+0

"저자"에게도 마찬가지라고 생각합니다. NSLog는 dealloc NSLog ("count % i/% i 보유", [title retainCount], [authors retainCount])의 작성자와 제목에 대한 보유 수를 릴리스하기 직전에 릴리스하고 릴리스하기 직전에 다시 계산합니다. – BBog

+0

retainCount를 사용하지 마십시오. 예상 한 것이 거의 없습니다. 훨씬 좋은 방법이 있습니다. 친척을 생각하면, 증가와 균형을 맞출 필요가 있습니다. bbum의 [retaincount is useless] (http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/)를 참조하십시오. 최고 : ARC를 사용하십시오! – zaph

관련 문제