2012-01-12 7 views
7

ARC Taşıma Aracı bu sorun yaşıyor: ÖzellikleCore Foundation'a otomatik olarak yüklenen bir nesneyi köprüliyorsam __bridge veya __bridge_retained kullanmalı mıyım?

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

, bunun bir __bridge yapmak ya __bridge_retained gerekip gerekmediğini konusunda emin değil. Ve ben de.

-fileURLWithPath otomatik olarak bir nesneyi döndürür ve bu yerde fileURL'nin sahibi değilim. Ancak aynı zamanda, nesnenin en az +1'lik bir tutma sayısı vardır.

Bunun sadece __bridge ile yapılması gerektiğini iddia ediyorum.

cevap

12

Sadece bunun için düzenli __bridge dökümünü kullanmak istiyorsunuz. Yalnızca bir CF CF nesnesinin yaşam döngüsünü yönetmek istiyorsanız, __bridge_retained kullanırsınız. Örneğin:

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

Yani __bridge_retained gerçekten bir ARC nesnesi vardı derleyici anlatıyor ve şimdi temelde doğrudan yönetmek için gidiyoruz CF nesnesine dönüştürmek istiyorum.