Buscar..


Asignación de rendimiento

En Swift, la administración de la memoria se realiza automáticamente mediante el conteo automático de referencias. (Consulte Administración de la memoria ) La asignación es el proceso de reservar un lugar en la memoria para un objeto, y en la comprensión rápida de su rendimiento requiere cierta comprensión del montón y la pila . El montón es una ubicación de memoria donde se colocan la mayoría de los objetos, y usted puede pensar que es un cobertizo de almacenamiento. La pila, por otro lado, es una pila de llamadas de funciones que han conducido a la ejecución actual. (Por lo tanto, un seguimiento de pila es una especie de impresión de las funciones en la pila de llamadas).

Asignar y desasignar desde la pila es una operación muy eficiente, sin embargo, en comparación, la asignación del montón es costosa. Al diseñar para el rendimiento, debe tener esto en cuenta.

Clases:

class MyClass {

    let myProperty: String

}

Las clases en Swift son tipos de referencia y, por lo tanto, suceden varias cosas. Primero, el objeto real se asignará al montón. Entonces, cualquier referencia a ese objeto se debe agregar a la pila. Esto hace que las clases sean un objeto más caro para la asignación.

Estructuras:

struct MyStruct {

    let myProperty: Int

}

Como las estructuras son tipos de valor y, por lo tanto, se copian cuando se pasan, se asignan en la pila. Esto hace que las estructuras sean más eficientes que las clases; sin embargo, si necesita una noción de identidad y / o semántica de referencia, una estructura no puede proporcionarle esas cosas.

Advertencia sobre estructuras con cadenas y propiedades que son clases

Mientras que las estructuras son generalmente más limitadas que las clases, debe tener cuidado con las estructuras con propiedades que son clases:

struct MyStruct {

    let myProperty: MyClass

}

Aquí, debido al conteo de referencias y otros factores, el rendimiento ahora es más similar a una clase. Además, si más de una propiedad en la estructura es una clase, el impacto en el rendimiento puede ser incluso más negativo que si la estructura fuera una clase.

Además, si bien las cadenas son estructuras, almacenan internamente sus caracteres en el montón, por lo que son más caras que la mayoría de las estructuras.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow