3

다음 누출 : 어떻게이 Core Foundation 객체가 유출되는 것을 피할 수 있습니까?

CFStringRef labelName = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row)); 
    cell.textLabel.text = (NSString *)labelName; 
    CFRelease(labelName); 

궁금 그것이 내가 다음에 수동으로 CFRelease 2 줄 이상 필요 CFStringRefABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row)를 할당 &을 깨지 않고 누출되지 않도록를 재 작성하는 방법이 경우? 물론, 그렇게하는 것이 큰 문제는 아니지만 ... 나는 단지 호기심이 많습니다.

편집 :CFAutoRelease일까요? 아래 내 의견을 참조하십시오.

답변

2

복사/가져 오기 의미 때문에 API에서 나온 모든 내용을 Copy과 함께 릴리스해야합니다. ABMultiValueCopyLabelAtIndex이 해당 요구 사항을 충족하므로 불행히도이 참조를 확보하고 나중에 릴리스해야합니다.

+1

'CFAutoRelease'는 어떻게됩니까? CFStringRef labelName = ABAddressBookCopyLocalizedLabel (CFAutoRelease (ABMultiValueCopyLabelAtIndex (aMultiRef, indexPath.row)))); – Meltemi

+1

'CFAutoRelease'가 없습니다; 당신이 만든 변수에 대한 참조를 일시적으로 지역 변수에 저장하고, 완료되면'CFRelease'를 저장해야합니다. – rpetrich

+2

iOS7 SDK의 @rpetrich에는 CoreFoundation/CFBase.h에 CFAutorelease가 있습니다. – thandasoru

0

Objective-C를 사용하여 자동 풀링을 수행 할 수 있습니다 (풀이있는 한). 먼저 이드에게 던지기 만하면 돼. 예 : [(id) labelName autorelease]는 정상적으로 작동하며 완벽하게 합법적입니다 (CFStringRef는 유료이며 NSString으로 가교 됨). 이론적으로 Apple이이를 공개적으로 문서화한다고 생각하지는 않지만 실제로 CoreFoundation 기반 유형으로이 작업을 수행 할 수 있습니다.

관련 문제