2012-01-27 2 views
0

누출.는 내가 갖는 이유는이 메모리 내가이 줄에서 악기 메모리 누수를 얻고있다

같이 다른 방식으로 초기화된다

chunksString = [NSString stringWithString:@""]; 

다른 방법은 값을 취

chunksString = [NSString stringWithFormat:@"%@%@",chunksString,string]; 

인스트루먼트 finalString이 충전 라인에 100 %의 누설을 알려준다.

chunksString은 alloc, copy 또는 finalString과 같은 초기화되지 않습니다. 둘 다 보유가있는 속성이 아닙니다. 누수가있는 이유는 무엇입니까?

감사합니다.

+0

내가 알 수있는 것은 finalString에 새 NSString이 할당되어 있습니다. 나중에 코드에서 공개 하시겠습니까? –

+0

@ Joachim - 공장에서 누수를 만드는 방법은 무엇입니까? [NSString stringWithFormat : @ "% @", chunksString]; – samfisher

+0

"chunkString이 클래스 필드 NSString으로 선언되었습니다."라고 정확히 말하면 어떻게됩니까? 그것은 재산인가? 이 경우 문자열은 copy로 선언되고 self.chunkString 및 nall에 할당 된 dealloc으로 유지 및 주소 지정되지 않아야합니다. 그거하고 있니? NSString * finalString = nil을 선언 할 때 –

답변

1

누설 초기 메모리 할당은 광고에있다 :

finalString = [NSString stringWithFormat:@"%@",chunksString]; 

누수 상기 finalString의 수명에 해당이 박리 균형 아니다 유지 있기 때문이다. 평생을 finalString으로 봐야합니다.

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

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

enter image description here

더 나은 아직, 모든 가능한 경우 ARC에 이식 할 수없는 레거시 코드가있는 경우, 그것은 개별 파일을 해제 할 수 있습니다 ARC를 사용합니다.

+0

분석기가이 누설을 감지했을 것 같습니까? –

+0

인스 트루먼 트를 다 했어. 그리고 finalString var은 어디에 사용되는지 같은 방법으로 선언됩니다. 다른 기능에는 나타나지 않습니다. 메소드가 선언 된 메소드에서만 사용됩니다. – NemeSys

+0

ARC를 사용하려면 플러스 하나. 개발자가 여전히 객체 할당을 수동으로 관리해야하는 이유는 거의 없습니다. –

관련 문제