2009-12-23 5 views
0

나는이 프로젝트에 쌓여있다.아이폰 대리자 메모리 누수 문제

내 응용 프로그램을 Instruments로 실행하면 → ← 표시 줄에 memoryleak이 표시됩니다. 주먹을 다 달릴 때 괜찮지 만 두 번째로 → ← 표시된 줄이 메모리 누수를 줘서, 왜 그런지 이해하지 못했습니까? 많은 것을 시도했지만 NSAutoReleasePool도 사용했지만 결과는 동일했습니다. 누군가 나를 도와 줄 수 있습니까? SBJSON * json = [[SBJSON alloc] init]; 오류 = nil; → NSDictionary * 결과 = [json objectWithString : 응답 오류 : & 오류]; ← [json release]; [응답 내용 릴리스]; NSArray * responsedNetworks = [resultsObjectForKey : @ "networks"]; NSMutableArray * serverResponse = [[NSMutableArray alloc] initWithArray : responsedNetworks]; 편집 : 예제 소스를이 주소로 업로드했습니다 : [제거됨] [1] 이제 문제가되는 소스가 위임 된 것은 아니지만 어디에서 문제가 발생했는지 확신 할 수 없습니다. 인스트루먼트는 메모리 누수에 대한 잘못된 위치를 보여줍니다. 누군가 내 실수를 보여줄 수 있습니까? 내가, 내가이 경고를 수정 코드의 일부 라인에 경고의 몇 가지를 준 예상대로 얘들 불행하게도, 난, 정적 분석기 연타를 시도 :이

편집이 감사합니다.

이제 장비에서 누설 오류가 발생하지만 Clang은 프로젝트에 오류가 없다고 말합니다.

마지막으로 내 문제는 해결되지 않았습니다.

가장 최근의 예제 응용 프로그램을 다운로드하고 눈으로 확인할 수 있습니다. 여기 EXAMPLE Project source입니다.

이러한 누출을 보는 방법 : 프로젝트를 열고 시뮬레이터에서 디버깅을 시작하십시오 (버전은 중요하지 않음). 디버그를 시작하면 열린 첫 번째 창에서 모서리의 정보 버튼 상단이 보입니다. 닫기 정보 창을 누른 후 다시 열면이 시점에서 계측기의 누출 메시지가 나타납니다. 그러나 Clang은 아무 것도주지 않습니다. 나는 Clang 측에 모든 것이 올 바르다는 것을 의미합니다.

정말 혼란 스럽습니까? 나는 어떻게해야합니까?

+0

어떤 물건을 유출하나요? –

+0

내가 아는 한, 나는 그들을 고칠 것이다 : – fyasar

+0

계기는 누출되는 물건을 알려줄 것이다. 유출하려는 객체가 유출 객체와 (일반적으로) 같지는 않습니다. –

답변

1

계기가 누출의 원인이되는 라인을 나타내지 않습니다. 나중에 유출 된 메모리를 할당 한 행을 나타냅니다. 주어진 코드 (분명히 전체 코드는 아님)에서부터, 나는 여러분이 마크 한 라인에 할당 된 메모리를 포함하고있는 serverResponse를 누출하고 있다고 의심 할 것이다. Instruments가 제공하는 라인 만 보지 마십시오. 어떤 과목이 누출 되었습니까? 그것은 라인만큼 힌트를 줄 것이다.

메모리 관리에 문제가 생기기 시작 했으므로 뭔가를 놓을 때 항상 nil로 설정하십시오. 이렇게하면 나중에 많은 두통과 충돌을 줄일 수 있습니다. 이 경우 나는 약 jsonresponse을 말하는거야 :

[json release]; 
json = nil; 

당신이 스노우 레오파드 (Snow Leopard)와 엑스 코드 3.2이있는 경우

는 분석기 (Cmd를 교대-A)를 실행합니다. 가장 일반적인 메모리 문제를 자동으로 발견합니다.

+0

안녕 Rob 감사합니다. 스노우 레오파드가 더 유용하다면 레오파드와 엑스 코드 3.1.4를 사용하고 있습니다. 제 시스템을 최대한 업그레이드 할 것입니다. 반면에 나는 이미 두통이있어서, 나는 많은 것을 시도했다. 반면에, 나는 Instruments를 신뢰해야합니까? 아마도 지난 며칠 동안 mycode의 잘못된 장소를 찾고있을 것입니다. – fyasar

+0

그런데 SBJSON에서 문제가 발생했다고 생각합니다. (완벽하게 사용하는 사람이라 할지라도 모두 바보 같은 생각을 안다는 것을 알고 있습니다.) 그런 다음 json 파서를 TouchJson으로 바꿨습니다. 코드에서 문제가 발생했습니다. 물론,하지만 나는 어디 있는지 모른다. 예제 애플리케이션을 다음 위치에 업로드했습니다 : http://hepsikolay.com/MemoryLeakApp.zip 다운로드 할 수 있습니까? – fyasar

+0

그리고 Classes> Controllers> NetworkSelection.m line 33을 보면 해당 라인이 보일 것입니다. self.networkList = arrayResponse; 이 줄에서 문제가 발생한다고 생각합니다. 그래서이 줄을 "self.networkList = nil;"으로 변경하면 작동 중이고, 악기에 메모리 누출이 없습니다. 내 실수는 어디에 있습니까? 내 마음을 구 해주세요. – fyasar

0

악기보다 사용하기가 훨씬 쉬운 도구가 있습니다. 이 도구는 Clang 정적 분석기입니다. The website describes 도구 세트를 설치하고 사용하는 방법. 그것은 사용하기 쉽고 매우 효율적입니다. 나는 항상 그것을 사용한다.

명령은 다음과 같습니다

xcodebuild clean 
scan-build -k -V xcodebuild 

그것은 결과가 웹 브라우저에 와서 정말 사용하기 쉽습니다! 인 스트 루먼트가 잡아 내지 못하는 누출을 잡아낼 것입니다. 이것은 Apple이 Snow Leopard에 통합 한 도구입니다 ... Leopard에서도 사용할 수 있습니다. 체크 아웃 the website for directions ..

희망이 도움이 되셨습니다!

+0

안녕하세요, 저는 이미 귀하의 제안을 시도했지만 결과는 같습니다. – fyasar