Sobes.tech
Middle+

Wie schreibt man Code, damit er aus Sicht der dynamischen Steuerung schnell läuft?

sobes.tech KI

Antwort von AI

Verwenden Sie struct und enum anstelle von class, wo immer möglich. Werttypen verwenden standardmäßig keine dynamische Dispatch.

Wenden Sie final auf Klassen und Methoden an, um Vererbung und Überschreibung zu verhindern, sodass der Compiler eine direkte Dispatch durchführen kann.

final class MyFinalClass { // Die Klasse kann nicht vererbt werden
    final func myFinalMethod() { // Die Methode kann nicht überschrieben werden
        // ...
    }
}

Verwenden Sie Protokolle mit nur static oder final Methoden/Eigenschaften oder mit Generics, die zur Compile-Zeit spezialisiert werden können.

protocol MyProtocol {
    static func staticMethod()
}

Verwenden Sie private und fileprivate für Methoden und Eigenschaften innerhalb von Klassen/Structs/Enums. Dies kann es dem Compiler ermöglichen, eine schnellere Dispatch zu verwenden, da der Gültigkeitsbereich eingeschränkt ist.

class MyClass {
    private func privateMethod() {
        // ...
    }
}

Vermeiden Sie häufige Verwendung gemeinsamer Protokolle zur Laufzeit, bei denen die konkreten Typen im Voraus unbekannt sind, da Aufrufe über Protokolle eine virtuelle Tabelle verwenden. Bevorzugen Sie Generics, wo immer möglich, zur Compile-Zeit.

Verwenden Sie das Attribut @inline(__always). Dies ist ein Hinweis für den Compiler, den Funktionskörper an der Stelle des Aufrufs einzufügen, um die Kosten des Funktionsaufrufs zu vermeiden. Es bringt nicht immer Vorteile.

@inline(__always)
func myInlinedFunction() {
    // ...
}