2012-01-12 1 views
7

ARC 마이그레이션 도구는이에 문제가있다 : 특히autoreleased 오브젝트를 Core Foundation에 연결하는 경우 __bridge 또는 __bridge_retained를 사용해야합니까?

NSURL *fileURL = [NSURL fileURLWithPath:path]; 
AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID); 

, 그것은 그것이 __bridge을하거나 __bridge_retained하는 경우는 확실하지 않다. 그리고 나도 마찬가지야.

-fileURLWithPath는 자동 렌더링 된 객체를 반환하며 여기서는 fileURL의 소유자가 아닙니다. 그러나 동시에 개체의 보유 횟수는 적어도 +1입니다.

저는 이것이 __ 브리지에서만 수행되어야한다고 확신합니다.

답변

12

일반용 __bridge은이 용도로만 사용하고 싶습니다. 캐스트 된 CF 객체의 수명주기를 관리하려는 경우에만 __bridge_retained을 사용합니다. 예를 들어 :

CFStringRef cf_string = (__bridge_retained CFStringRef)someNSString; 
// some long time later, perhaps in another method etc 
CFRelease(cf_string); 

는 그래서 __bridge_retained 정말 당신이 ARC 객체를 가지고 컴파일러를 말하고 지금 당신은 기본적으로 당신이 직접 관리하는거야 CF 객체로 돌려 싶다.