Sobes.tech
Middle+

¿Cómo escribir código para que funcione rápidamente desde el punto de vista de la gestión dinámica?

sobes.tech AI

Respuesta de la IA

Utilice struct y enum en lugar de class donde sea posible. Los tipos de valor por defecto no utilizan despacho dinámico.

Aplique final a clases y métodos para evitar la herencia y la sobrescritura, permitiendo que el compilador realice un despacho directo.

final class MyFinalClass { // La clase no puede ser heredada
    final func myFinalMethod() { // El método no puede ser sobrescrito
        // ...
    }
}

Utilice protocolos con requisitos solo de métodos/propiedades static o final, o con genéricos que puedan ser especializados en tiempo de compilación.

protocol MyProtocol {
    static func staticMethod()
}

Utilice private y fileprivate para métodos y propiedades dentro de clases/estructuras/enums. Esto puede permitir al compilador usar un despacho más rápido, ya que el ámbito está restringido.

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

Evite el uso frecuente de protocolos comunes en tiempo de ejecución, donde los tipos específicos son desconocidos de antemano, ya que las llamadas a través de protocolos usan tablas virtuales. Prefiera los genéricos cuando sea posible en tiempo de compilación.

Utilice el atributo @inline(__always). Es una sugerencia para que el compilador intente incrustar el cuerpo de la función en el lugar de la llamada, evitando costos de llamada a función. No siempre proporciona beneficios.

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