2012-01-12 9 views
7

ARC Migration Tool ma problemy z tym:Czy muszę używać __bridge lub __bridge_retained, jeśli pomostam autoreleasedem obiekt do Core Foundation?

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

W szczególności, nie jest pewien, czy powinien to zrobić __bridge lub __bridge_retained. I ja też.

-fileURLWithPath zwraca obiekt autoreleased, w tym miejscu nie jestem właścicielem plikuURL. Ale w tym samym czasie obiekt ma liczbę zatrzymań co najmniej +1.

Założę się, że należy to zrobić tylko z __bridge.

Odpowiedz

12

Chcesz użyć zwykłej obsady __bridge tylko do tego. Można użyć wartości __bridge_retained tylko w celu zarządzania cyklem życia rzutowanego obiektu CF. Na przykład:

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

Więc __bridge_retained jest naprawdę mówi kompilatorowi, że masz obiekt ARC i teraz chcesz po prostu przekształcić go w obiekt CF, że masz zamiar zarządzać bezpośrednio.

Powiązane problemy