アプリのパフォーマンスを最後まで絞り出そうとしています。可能な限り、クラスよりも構造体を使用するようにしています (状態を共有しない、デフォルトで直接ディスパッチしないなど)。しかし、私のビュー コントローラーと 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 属性の使用例については、オーバーライドの防止を参照してください。