2011-12-30 15 views
0

私は客観的なプログラマであり、私はどのように低いほうがいいのだろうと思っています(方法は賢明です)。より高いまたは低いレベル?

たとえば、NSURLがあり、次にCFURL(より低い)があります。低レベルまたは高レベルを使用すると機能が追加されるのか、それとも高速なのかはわかりません。

+2

あなたが受け入れる答えの1つが「低い」場合は、論理的な結論に達するまで、アセンブリ言語で記述する必要があります。 –

+0

どのような機能が必要ですか?どれくらいのパフォーマンスですか?通常、プログラミングを始める前に最適化することは良い戦略ではありません。 –

+4

"利用可能な最高レベルの抽象化を常に使用し、測定結果が必要であることを示す場合は、下位レベルの抽象化にドロップします。 - Chris Hanson http://eschatologist.net/blog/?p=232 – 0x8badf00d

答えて

3

FoundationNSURL)のフレームワーククラスは、多くの場合、コードCoreFoundationCFURL)に基づいています。

CFタイプでは、通常、関連する関数を使用してデータを操作する不透明な構造体を扱います。純粋なCコードを書く必要がある場合は、CFを使用する必要があります。さもないと、これらはちょっとしたもので、場所で使うのは難しいかもしれません。

Objective-Cのクラスはまた、追加のカテゴリーのような追加のことを行うことを可能にするなど

フリーダイヤルがありますが、少しあなたのコードをミックスして一致させる必要があるかもしれない時間があり、それはだ

を橋渡し多くのタイプが単純にキャストできることを知っておくと便利です。例えばNSStringCFStringRef

するのではなく、私はいくつかのURLエンコードを行うために必要なときに私がいた最近、これをしなければならなかった場合の例を使用することができた(NSStringstringByAddingPercentEscapesUsingEncoding:はかなりそれをカットしていませんでした)。この関数はCFStringRef年代を、単純なキャストで、私は私のNSString使用できる「必要な一般的にあなたが離れて得ることができるとあなたができるだけFoundationクラス(抽象度の高い)を使用する必要がありますここで、s

CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
             (CFStringRef)stringToEncode, // <- NSString 
             NULL, 
             (CFStringRef)encodeChars, // <- NSString 
             kCFStringEncodingUTF8) 

を彼らはほとんど同じ機能を提供する可能性が高いです。私がしなければならないURLのエンコーディングのように、そうでない場合はさまざまなシナリオが当然あります。

2

objective-cアプリを作成する場合は、objective-cバージョンを使用してください。一般に、CおよびC++で書かれたアプリケーションがシステムAPIと通信できるように、CFバージョンが存在します。

CFバージョンでより細かい制御が可能な場合もあります(CFコレクションは、目的のオブジェクトではなく任意のポインタを格納するように設定できます)。そのような細かいコントロールが必要なときは、CF版をチェックしてください。さもなければ、目的のバージョンはほとんど常にあなたが望むものになります。一般に、それらが「低レベル」であることの有用性は、より速いものよりも柔軟性が高い(複雑さの対応する増加を伴う)場合が多い。

(2つの間の速度の差はナノ秒のオーダーになり、ある時点で最適化する必要がある場合は、NS-からCF-に切り替えることは答えになりません)

関連する問題