NSString e CFStringRef sono "Toll free bridged", ovvero è possibile semplicemente digitare tra loro.
Ad esempio:
CFStringRef aCFString = (CFStringRef)aNSString;
funziona perfettamente e in modo trasparente. Allo stesso modo:
NSString *aNSString = (NSString *)aCFString;
La sintassi precedente era per MRC. Se stai utilizzando ARC, la nuova sintassi di casting è la seguente:
NSString *aNSString = (__bridge NSString *)aCFString;
funziona anche. La cosa fondamentale da notare è che CoreFoundation restituirà spesso oggetti con conteggi di riferimento +1, il che significa che devono essere rilasciati (tutte le funzioni di formattazione CF [Tipo] Crea lo fanno).
La cosa bella è che in Cocoa puoi tranquillamente utilizzare autorelease o release per liberarli.
Se si utilizza ARC, la nuova sintassi casting per questo caso è ora NSString * aNSString = (__bridge NSString *) aCFString – MikeG
Grazie MikeG, ho dovuto fare simile per la conversione inversa: NSString * str = @ "abc"; CFStringRef cstrref = (__ bridge CFStringRef) str; – KomodoDave
@NilObject si prega di aggiornare la risposta per includere ARC in modo che gli utenti non debbano controllare i commenti. Grazie. –