2009-05-10 4 views
3

나는 다음과 같은 기능이 있습니다Clang이 내 autoreleased 모든 객체에 대해 불평하는 이유는 무엇입니까?

- (NSString *)urlEncodedValue { 
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(
        kCFAllocatorDefault, 
        (CFStringRef)self, 
        NULL, 
        CFSTR("?=&+/\r\n"), 
        kCFStringEncodingUTF8 
); 

return [result autorelease]; 

} 

왜 연타 나에게 다음과 같은 불만을주고 있습니까? 'CFURLCreateStringByAddingPercentEscapes'을 작동 할 수

  • 1 전화는 +1 유지 카운트 코어 재단 객체를 반환 (소유 참조)
  • 2 개체 전송 -autorelease 메시지
  • 3 객체가 소유 기준으로 호출자에게 리턴 (발신자에게 전송 한 유지 카운트)
  • 오토 릴리즈 오버
  • 4 개체 : 개체가 -autorelease 송했지만 개체가 로컬 제로 (볼 수있다) 유지 카운트받는

내가 아는 한, 이것은 메모리 관리와 객체 소유에 관한 애플의 가이드 라인을 따른다. 객체를 명시 적으로 해제해야합니까? 이 오류는 내 프로젝트에서 비슷한 상황에 모두 19 번 발생했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

좋은 질문 ... 나는 동일한 문제가 있으며, 무엇이 잘못되었는지도 이해하지 못합니다. 어쩌면 그것은 clang의 버그 일 것입니다 ... –

+0

아마도 그럴 수도 있습니다 만, autoreleased 오브젝트가 정확히 모호하지는 않습니다. 또한 + alloc 및 -init를 사용하여 autorelease를 중첩 할 때도 발생합니다. –

답변

3

내 자신의 질문에 대한 답변을 찾았습니다. 다른 사람이 문제를 발견하면 여기에 게시합니다. 나는 체커 -0.198을 사용하고 있었는데, 체커 -0.204는 그런 문제가 없다고보고했다. 그것이 일시적인 회귀였던 것 같습니다.

관련 문제