質問

iPhoneの開発では、速度は本質的です。ファンデーションタイプ(そのカウンターパート、nsmutedabledictionary)とのコアファウンドタイプ(cfmutedictionaryrerefなど)を使用することに速度の違いがあるかどうかは誰もが知っていますか?

CFタイプを操作することは、OBJCランタイムメッセージを投げる必要がないため、より速くなると思います。これは根拠のない仮定ですか、実際に誰もがこれを調べましたか?

役に立ちましたか?

解決

技術的な意味では、はい、まさにその理由で、それはより速いです。

実用的な意味では、いいえ、それはより速くありません。一つには、速度の違いはです 小さな. 。私たちは、プロセス全体の存続期間中に節約されたミリ秒を話しています。

iPhoneの節約は大きいかもしれませんが、それでもあなたが得ることができる最も小さなスピードゲインです。あなたの時間は、アプリを楽器でプロファイリングし、それがあなたに言うところに行って、あなた自身のコードのホットスポットをアイロンをかけるのにはるかに良いです。

そして、それは基盤がより速くなるところです: あなたの 時間。

実行可能なときにFoundationのAutorElease機能を使用するコードは、簡単に回避できるメモリリークを避けることで、多くの時間と頭痛を節約できます(つまり、書き込みを忘れたり、到達したりしなかった release メッセージ)。 CFにはオートリリースがないので、明示的に覚えておく必要があります CFRelease あなたがそれを作成またはコピーするすべてのもの - そしてあなたがそのコードに到達しないか、または失敗したとき(そして私は意味します いつ- 私は経験から話します)、あなたはメモリリークを狩るのにもっと多くの時間を費やすでしょう。静的アナライザーは役立ちますが、すべてをキャッチすることはできません。

(あなたは技術的に できる CFオブジェクトをAutoreleaseしていますが、そうするコードはひどくugいものであり、既に途中のスピードゲインだけに水をまくだけです。)

したがって、可能な限り基礎に固執します。 AutorEleaseで船外に出ないでください。純粋なココアでさえ、オブジェクトを明示的にリリースすることがまだ正当化される場合(ほとんどがタイトループ)、これはココアタッチに2倍になります(メモリがあまりにも多くのメモリを割り当てるとアプリを殺すため、ビッグをリリースすることをお勧めしますできるだけ早く画像のようなオブジェクト)。しかし、通常、Autoreleaseは、CFがユーザーを救うよりもはるかに多くの時間を節約します。

非時代関連の理由は、値と(メッセージセレクターから)引数名を備えたObjective-Cコードが、C関数ベースのコードよりもはるかに読みやすいことです。これはあなたの仕事をより速くすることはないかもしれませんが、それは確かにそれをより楽しくします。

他のヒント

CF関数にコードを書くことで、実際にアプリにパフォーマンスが向上しますが、パフォーマンスを改善するためのもう1つのより良いアプローチがあります。アセンブリで直接書き込むと、パフォーマンスの利点がさらに増えます(これは極端なアプローチです)。

少なくともPeter Hoseyが言及した理由により、高レベルの言語構造は低レベルの言語構造よりも望ましい。これには、開発者が機能的なものではなくアプリケーションの非機能的側面により関心があるため、プロジェクトの障害に簡単につながる可能性のある時期尚早の最適化を追加できます。

完全に機能的なアプリを持っていると、コードの一部がパフォーマンスボトルネックを持っていると感じた場合、それらを低レベルの言語コンストラクトに書き換えることにより、それらを最適化することができます。少なくとも現在のコードとの比較ポイントがあり、低レベルのコードが期待どおりに動作することを確認します(手動または単体テストのいずれかがここでトリックを行います)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top