Sobes.tech
Middle+

Como escrever código para que funcione rapidamente do ponto de vista da gestão dinâmica?

sobes.tech IA

Resposta da IA

Utilize struct e enum em vez de class sempre que possível. Os tipos de valor por padrão não usam despacho dinâmico.

Aplique final às classes e métodos para evitar herança e sobrescrita, permitindo ao compilador fazer despacho direto.

final class MyFinalClass { // A classe não pode ser herdada
    final func myFinalMethod() { // O método não pode ser sobrescrito
        // ...
    }
}

Use protocolos com requisitos apenas de métodos/propriedades static ou final, ou com genéricos que podem ser especializados em tempo de compilação.

protocol MyProtocol {
    static func staticMethod()
}

Use private e fileprivate para métodos e propriedades dentro de classes/estruturas/enums. Isso pode permitir ao compilador usar uma dispatch mais rápida, pois o escopo é limitado.

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

Evite o uso frequente de protocolos comuns em tempo de execução, onde tipos específicos são desconhecidos de antemão, pois chamadas através de protocolos usam tabela virtual. Prefira genéricos quando possível em tempo de compilação.

Use o atributo @inline(__always). É uma sugestão ao compilador tentar incorporar o corpo da função no local da chamada, evitando custos de chamada de função. Nem sempre traz benefício.

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