NSString i CFStringRef są "Bez opłat mostowych", co oznacza, że można między nimi typować.
Na przykład:
CFStringRef aCFString = (CFStringRef)aNSString;
działa doskonale i przejrzyście. Podobnie:
NSString *aNSString = (NSString *)aCFString;
Poprzednia składnia dotyczy MRC. Jeśli używasz ARC, nowa składnia rzutowania wygląda następująco:
NSString *aNSString = (__bridge NSString *)aCFString;
działa również. Najważniejszą rzeczą, na którą należy zwrócić uwagę, jest to, że CoreFoundation często zwraca obiekty z liczbą referencyjną +1, co oznacza, że muszą zostać zwolnione (wszystkie funkcje CF [Type] Create format to robią).
To dobrze, że w Cocoa można bezpiecznie używać autorelease lub zwolnić, aby je uwolnić.
Jeśli używasz Arc nową składnię decydujący w tym przypadku jest teraz NSString * aNSString = (__bridge NSString *) aCFString – MikeG
Thanks MikeG, musiałem zrobić podobny do odwrotnej konwersji: NSString * str = @ "ABC"; CFStringRef cstrref = (__ bridge CFStringRef) str; – KomodoDave
@NilObject proszę zaktualizować odpowiedź tak, aby zawierała ARC, aby użytkownicy nie musieli sprawdzać komentarzy. Dzięki. –