1. ホーム
  2. cocoa

[解決済み] CFStringRefをNSStringに変換する方法は?

2022-04-22 20:51:14

質問

NSString *aNSString;
CFStringRef aCFString;
aCFString = CFStringCreateWithCString(NULL, [aNSString UTF8String], NSUTF8StringEncoding);
aCFString = CFXMLCreateStringByUnescapingEntities(NULL, aCFString, NULL);

どうすれば、新しい NSString から aCFString ?

解決方法は?

NSString と CFStringRef は、quot;Toll free bridged" つまり、単純にタイプキャストで行き来できます。

例えば

CFStringRef aCFString = (CFStringRef)aNSString;

は完全に透過的に動作します。同様に

NSString *aNSString = (NSString *)aCFString;

以前の構文はMRC用でした。ARCを使用している場合、新しいキャスティング構文は次のようになります。

NSString *aNSString = (__bridge NSString *)aCFString;

も同様に動作します。注意すべき点は、CoreFoundationはしばしば参照カウントが+1されたオブジェクトを返すことで、解放する必要があることを意味します(すべてのCF[Type]Createフォーマット関数がこれを行います)。

Cocoaでは、安全にautoreleaseやreleaseを使用して、それらを解放することができるのが良い点です。