問題タブ [method-dispatch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 実行時に、Swift はどの実装を使用するかをどのように認識しますか?
これが継承階層である場合、Swift は v-table を使用して正しい実装を検索することを期待します。しかし、具体的な型はarray
を実装するものであれば何でもA
構いませんし、その他のプロトコルもいくらでもあります。Swift ランタイムは、v-tables も使用している場合、オブジェクトの構造をどのように知るのでしょうか?
swift - Swift クラスを final としてマークすると、含まれているすべての var、let、および関数も自動的に Static Dispatch の利点を得ることができますか?
アプリのパフォーマンスを最後まで絞り出そうとしています。可能な限り、クラスよりも構造体を使用するようにしています (状態を共有しない、デフォルトで直接ディスパッチしないなど)。しかし、私のビュー コントローラーと UIView オブジェクトは明らかにクラスのままです。パフォーマンス上の理由から、メソッドとデータ メンバーのすべてに 直接ディスパッチを強制したいと考えています。
クラスfinalのすべてのvar、let、およびfuncをマークする必要がありますか、それとも、その下にあるすべてがダイレクトメソッドディスパッチを利用できるようにするには、ホスティングクラスを final にマークするだけで十分ですか?
つまり、各メソッドと変数の前に final をどこにでも貼り付けるのは非常に面倒です。したがって、クラス自体に配置するだけで、すべてのクラスメンバーに直接ディスパッチを強制するのと同じ効果があることを願っています。しかし、それをテストまたは検証する方法がわかりません。
私が何を話しているのか疑問に思っている人は、この記事「Swift でのメソッドのディスパッチ」をチェックしてください。構造体とプロトコル拡張により、デフォルトで Static Method Dispatch (最速のパフォーマンス) が提供されますが、クラスでは提供されません。クラスの静的メソッドはそうしますが、すべてのインスタンス メソッドとデータ メンバーに対して Static Dispatch を強制したいと考えています。
https://www.raizlabs.com/dev/2016/12/swift-method-dispatch/
Swift 言語ランタイムのドキュメントでは、サブクラス化する機能への影響について言及していますが、「final」とマークされたクラスの子メンバーと関数のディスパッチ動作がどうなるかについては説明していません。すべてを個別に final とマークすることなく、その下にあるすべてが Static Method Dispatch を獲得できれば素晴らしいことです。
最後の
この修飾子をクラス、またはクラスのプロパティ、メソッド、または添字メンバーに適用します。クラスをサブクラス化できないことを示すためにクラスに適用されます。クラスのプロパティ、メソッド、またはサブスクリプトに適用され、クラス メンバーをどのサブクラスでもオーバーライドできないことを示します。final 属性の使用例については、オーバーライドの防止を参照してください。