4

オーディオ ユニットのレンダリング コールバックで実行されるリアルタイム オーディオ処理コードを作成しています。

このスレッドは、システムが認識する最高の優先度レベルにあります。

Apple は、この呼び出しで行われる処理量を最小限に抑えるように指示しています。彼らの推奨事項の 1 つは、Objective-C メソッドの呼び出しを避けることです。

しかし、なぜ?

Objective-C メソッドが呼び出されるとどうなりますか? 実際のオーバーヘッドはいくらですか?

4

1 に答える 1

8

Objective-C メソッドの解決は動的です。C や C++ などの他の言語では、関数呼び出しは、基本的に関数を含むアドレスへのジャンプとして、コンパイル時に設定されます。ただし、Objective-C では、メソッド呼び出しは「メッセージの送信」として実装されており、同じようには機能しません。ハードコーディングされたジャンプの代わりに、ルックアップ プロセスが含まれます。

このルックアップ プロセスは、実行するメソッドのアドレスの検索に関連するオーバーヘッドとして発生します。これは非常に最適化されていますが、特定のタイプのコードではオーバーヘッドがパフォーマンスの問題を引き起こす可能性があります。

追加の詳細に興味がある場合は、Mike Ash がObjective-C メッセージングで何が起こるかについて素晴らしい記事を書いています。

于 2011-04-18T08:11:33.727 に答える