2012-01-12 17 views
7

La herramienta de migración de ARC está teniendo problemas con esto:¿Debo usar __bridge o __bridge_retained si estoy enlazando un objeto liberado automáticamente con Core Foundation?

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

En particular, no está seguro acerca de si se debe hacer un __bridge o __bridge_retained. Y yo tampoco.

-fileURLWithPath devuelve un objeto liberado automáticamente, y en este lugar no soy el propietario de fileURL. Pero al mismo tiempo, el objeto tiene un conteo retenido de al menos +1.

Apuesto a que esto tiene que hacerse solo con __bridge.

Respuesta

12

Desea utilizar el modelo __bridge normal solo para esto. Utilizaría __bridge_retained solo si desea administrar el ciclo de vida de un objeto CF fundido. Por ejemplo:

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

Así que la __bridge_retained es realmente indica al compilador que tenía un objeto ARC y ahora desea activar básicamente en un objeto de CF que va a gestionar directamente.

Cuestiones relacionadas