1

iOS プログラムを作成するときに、SEL (@selectors) を渡して他のクラスで呼び出した場合、パフォーマンスに影響はありますか? これは通常のメソッド呼び出しよりも大幅に遅いですか?

4

3 に答える 3

2

他のクラスからのメッセージング (ObjC で有名なことの 1 つ) のパフォーマンスが低下するのはなぜですか? もちろん、C 関数と比較すると、いくらかのオーバーヘッドがあります (メソッドにさらに 2 つの部分が追加されるため)。セレクターは単なるデータ型であるため、セレクターを SEL 型に渡すことは、BOOL または int を送信することと同じくらいコストがかかります。ただし、渡されたセレクターから実際に SEL タイプを呼び出すには、NSInvocation オブジェクトを作成することをお勧めします。これにより、オーバーヘッド時間がわずかに増加します。

そして、nil へのメッセージ (他のクラスについて言及しました) が nil を生成するため、objC では多かれ少なかれ安全です。

于 2012-05-24T12:28:47.120 に答える
0

コンパイラはすべてのオブジェクトへの参照を作成し、コンパイル時にクラスと一緒に依存関係があるため、最初の実行時以外はあまり効果がない可能性があるため、ロード時間が少し遅くなる可能性があります(非常に大きなプログラムでも..)ただし、中間ステップで非常に大きなオブジェクトが作成されず、大規模な動的操作が含まれていない場合は、その後はそれほど多くはありません。ここでは、ローカル関数の呼び出しと別のクラスからの同じ関数の呼び出しについてのみ話しているためです。

とにかく、セレクターを使用して別のクラスの関数を参照するのはなぜですか。

于 2012-05-24T12:24:15.873 に答える
0

私の限られた知識では、セレクターは単にメソッド名のエンコーディングです。[object method]Objective-C では、オブジェクトにメッセージを送信することによってメソッドが呼び出されることを考えると、明示的なメソッド呼び出し ( ) と暗黙的な呼び出し( )の間にパフォーマンスの違いが生じる理由がわかりません[objectDelegate selector]

于 2012-05-24T12:28:56.977 に答える