1

「CFStringRef」の使用について疑問があります。私はiPhoneの連絡先を管理するいくつかの例を見てきましたが、それらのほとんどでそれらが使用しています。

...
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, 0);
...
NSString *email = (NSString *)emailRef;

キャストを使用する代わりにCFStringRefが使用される理由がわかりません。

...
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
NSString *email = (NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
...

CFStringRefを使用するのが一般的ですか?ダイレクトキャスティングを使用するのは正しいですか?

4

2 に答える 2

0

違いはありません。最初の例では、追加の一時変数を使用しています。メモリ管理の側面に注意を払う必要がありますが、ストレートキャストを実行することは完全にOKです。ABMultiValueCopyValueAtIndexドキュメントは明確ではありませんが、保持されたオブジェクトを返すように聞こえます。

于 2012-06-12T08:58:08.973 に答える
0

CFStringは、CocoaFoundationの対応するNSStringと「無料でブリッジ」されています。これは、Core Foundationタイプが、ブリッジされたFoundationオブジェクトと関数またはメソッド呼び出しで交換可能であることを意味します。したがって、NSString *パラメーターが表示されるメソッドでは、CFStringRefを渡すことができ、CFStringRefパラメーターが表示される関数では、NSStringインスタンスを渡すことができます。これは、NSStringの具象サブクラスにも当てはまります。

どちらも同じです。

于 2012-06-12T08:58:54.557 に答える