2

プロジェクトの 1 つを ARC に変換していますが、次の行でエラーが発生します。

_font = CTFontCreateWithName((CFStringRef)_fontName, fontSize, NULL);

ここで、_fontName は NSString です。エラーは次のとおりです。

Objective-C ポインター型 'NSString *' から C ポインター型 'CFStringRef' (別名 'const struct __CFString *') へのキャストには、ブリッジ キャストが必要です。

xCode から修正する方法について 2 つのオプションがあります。

__bridge を使用して直接変換する (所有権の変更なし)

また

CFBridgingRetain 呼び出しを使用して、ARC オブジェクトを +1 'CFStringRef' (別名 'const struct __CFString *') として使用できるようにします。

どちらがより良い選択肢でしょうか? CoreText メソッドがそれを保持すると推測しているため、最初の選択肢を考えています。しかし、繰り返しになりますが、ARCで何かを割引していないことを確認したいだけです.

4

1 に答える 1

3

参照の所有権を譲渡する必要がない_fontNameため、次を使用する必要があります。

_font = CTFontCreateWithName((__bridge CFStringRef)_fontName, fontSize, NULL);
于 2013-08-26T22:34:50.860 に答える