1

多くのライブラリで使用されている、、 、 などのようにCFで始まり で終わる変数と関数があることに気付きました...RefCFStringRefCFURLRefCFHTTPMessageCreateRequest

1) は何CFの略ですか? Apple がそのような略語について何も言わない理由がわかりません。

CFStringRef2) を使用する代わりに(たとえば) を使用する利点は何NSStringですか?

3) これらのCF変数を使用する方がよい場合は、すべての通常の変数を次のように置き換える必要がNSStringありCFStringRefますか?

4

3 に答える 3

2

Objective-C は c 言語で構築され、CF (Core Foundation) 型は C 構造体であり、通常は Objective-C オブジェクトでラップされます (CFStringRef は NSString でラップされ、CGImageRef は UIImage でラップされます)。

よほどの理由がない限り、Objective-C レベルのコードを使用してください。メモリ管理ははるかに単純で (ARC では自動)、一般的にコードはよりクリーンになります。

編集:@omzが指摘したように、ラップはNSStringには正しくありません。ブリッジされています。他の回答のいくつかはこの概念を説明しています

于 2012-08-06T08:44:36.200 に答える
2

Appleのドキュメントから:

Core Foundation は、Objective-C ベースの Foundation フレームワークから概念的に派生し、C 言語で実装された一連のプログラミング インターフェイスを備えたライブラリです。これを行うために、Core Foundation は C で制限されたオブジェクト モデルを実装します。Core Foundation は、データと関数をカプセル化する不透明な型を定義します。これ以降、「オブジェクト」と呼ばれます。</p>

これは本質的に違いをまとめたものです。Core Foundation (CF) は、Foundation フレームワークの形式で言語に付属する多くの Objective-C 実装の純粋な C 実装を提供します。NS が 'NeXTSTEP' の略で、Mac OS X の大部分のアブシスを形成したオペレーティング システムの名前であることは正しいですが、これは型が Objective C クラスであることも示しています。CF 型は純粋な C 実装であり、それらを操作するための C 関数が付属しています。

CF 構造を使用すると、同等の NS よりも利点が得られる場合があります。たとえば、CFDictionary では、NSDictionary よりも値とキーに対する制限が少なくなります。しかし、そのような問題が発生しない限り、参照を同等の CF に変更する理由はありません。ARC は、CF タイプでも簡単には機能しません。

また、フリー ブリッジングを使用して CF と Foundation の間をマッピングすることもできます。

于 2012-08-06T08:46:33.013 に答える
2

CFコアファンデーションの略です。これについて詳しく知りたい場合は、Core Foundation Design Concepts Guideを読むことから始めることができます。Core FoundationのString Programming Guide と Core FoundationCollections Programming Topics もCFStringRefあり、さまざまなコレクション タイプ (配列、辞書など)について詳しく説明しています。

基本的に、Core Foundation は比較的低レベルのフレームワークであり、Foundation と同じことをいくつか実行しますが、Objective-C ではなく C で記述されています。一部の Core Foundation の「クラス」(実際にはクラスではない) も、対応する Objective-C と「無料でブリッジ」されています。たとえば、aCFStringRefを anにキャストできNSString *ます (ただし、ARC ではもう少し複雑です)。 )。

Core Foundation でのみ使用できる特定の API が必要ない場合は、Foundation の代わりにそれを使用する必要はまったくありません。Core Foundation コードは、Objective-C よりも読みにくい傾向があり、メモリ管理も少し複雑になります。

ただし、Core Foundation の基本的な概念を理解することは非常に役立ちます。同様に構築された他のフレームワークがまだかなりあるためです。Core Text と Core Graphics はその例です。正式には Core Foundation に属していませんが、同じ命名規則とメモリ管理規則を使用しています。また、Core Foundation でのみ使用でき、Foundation に対応する API がない API もいくつかありますCFBitVector。例として <code>CFBagRef または (両方のコレクション型) があります。

于 2012-08-06T08:48:44.917 に答える