Bueno, primero hay que saber si está utilizando ARC o no, debido a que las reglas cambian un poco. Luego, necesitas saber qué es lo que realmente quieres hacer con tu elenco. ¿Desea usar el valor o transferir la propiedad?
Asumiré ARC, porque, IMO, todo código nuevo realmente debería usar ARC (y ARC es donde prevalecen los problemas de conversión).
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
El código anterior arroja la referencia CF a un NSArray*
que se puede utilizar en el contexto actual. No se ha producido transferencia de propiedad. someArrayRef
sigue siendo su referencia, y aún debe liberar manualmente someArrayRef
o se perderá.
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
En este código, no solo obtiene un elenco, sino una transferencia de propiedad. someArrayRef
ahora ya no contiene la referencia, por lo que no necesita ser liberado manualmente. En cambio, cuando se libera array
, el objeto se destrabará (suponiendo que no haya otras referencias en otros lugares).
¡Muchas gracias! ¡Lo intentaré ahora mismo! – user1574429
No necesita copiarlo. Un molde de puente gratuito es, literalmente, simplemente 'NSArray * myNsArray = (NSArray *) myCfArray;' – jjv360
Eso solo funciona para código que no es ARC. –