2011-09-06 4 views
0

얻을 수 55 행에 할당되어 'returnURL'에 저장되는 객체의 누출 가능성 메모리 누수 오류. return이 실행되지 후iPhone 메모리 누수

내 코드

NSString *returnURL = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
return returnURL; 
[returnURL release]; 

+1

이것은 자동 릴리스를 사용하는 상황입니다. – Joe

답변

3

당신이 그것을 반환하기 전에이있는 NSString을 "autorelease를"해야합니다 :

NSString *returnURL = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
return [returnURL autorelease]; 

또는 패턴 많은 사용을 단순히의 사이트에서 autorelease를하는 것입니다 사실, 이것은 오토 릴리즈의 고전적인 예이다 ALLOC :

NSString *returnURL = [[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding] autorelease]; 

이 기본적으로 당신이 참조를 유지하고 싶지 않은 말을하는지 의미하지만, 당신이 t에 다시 전달할 수 있도록 이벤트 루프의 나머지 부분에 대해 "생존"을 유지하려면 그는 소유주에 대해 걱정하지 않고 사용할 수있는 방법의 호출자입니다.

+0

고맙습니다. – HardCode

7

모든 문을 도와주세요. 따라서 returnURL은 공개되지 않습니다. 호출자에게 객체를 보유 할 수있는 기회를주기를 원하기 때문에 반환하기 전에 해제하지 않으려 고합니다.

return [returnURL autorelease]; 
+0

어디에 출시해야합니까? – HardCode

+0

@Mr. D 이것은 autorelease가 무엇입니까 – albertamg