ios swift singleton static-methods

ios - Diferencia entre función estática y clase singleton en swift



static-methods (3)

Quiero crear una clase donde se mantendrán todos los métodos de utilidad y estos métodos se utilizarán en toda la aplicación.
Problema: 1
¿Es bueno crear una clase singleton y mantener todos los métodos necesarios allí o debería crear una clase donde todas las funciones sean estáticas?
Problema 2
¿Cuál es la principal diferencia entre los dos enfoques anteriores en Swift?
Problema 3
¿Cómo afectará el rendimiento en iOS?


Claro que esto suena confuso y puede ser debatido. Sin embargo, a partir de las mejores prácticas puedo poner algunas sugerencias.

Singleton generalmente se usa para crear una inicialización intensiva de recursos y un temporizador, por ejemplo: un conector de base de datos, un controlador de inicio de sesión y demás.

Las clases de utilidad son clases que solo tienen funciones y variables estáticas. No debe ocuparse de tareas asíncronas y manejo costoso de recursos como abrir un conector de base de datos.

En su caso, si la utilidad está haciendo un proceso intensivo de recursos, es mejor envolverlo en un singleton. Si no, las funciones estáticas en una clase son mejores en mi opinión. Esto también se debe a que Swift distribuirá todas las funciones estáticas en una clase utilizando la distribución estática . Mientras que esto no puede ser cierto en Singleton, aunque a Swift le gusta optimizar.

El envío estático es 4 veces más rápido que el envío dinámico en lo que respecta al tiempo de ejecución de Objective-C. Esto también es cierto para Swift. Sin embargo, solo lleva 4 nano segundos despachar Dynamiclly.

Espero que esto te aclare.


Digamos que tenemos dos clases.

Clase con todos los métodos estáticos y variables estáticas De esta manera puede acceder a los métodos de clase sin crear instancias de un objeto. Además, si se requieren algunos controladores de datos pequeños, se pueden almacenar en variables estáticas. Todos los hilos que acceden a esta clase no terminarían creando instancias duplicadas de variables de datos.

Clase Singleton Esta clase tendrá un método init privado y compartirá una sola instancia a través de una instancia estática. Todos los hilos que acceden a la instancia no terminarían creando instancias duplicadas de variables de datos.

Entonces, técnicamente, ambos pueden sonar muy similares para su escenario de una clase de utilidad y puede ser confuso tomar una decisión, puede usar los siguientes casos de uso para tomar una decisión.

  • ¿Esta clase define principalmente implementaciones lógicas? Si el propósito principal de los métodos de clase es proporcionar cálculos lógicos / manipulaciones u operaciones que no requieren el almacenamiento de datos en variables además de identificadores temporales, entonces siempre debe optar por una clase estática. Por ejemplo, la clase de utilidad que ha mencionado aquí. Los métodos de utilidad como cambiar el tamaño de una imagen, leer un archivo, analizar las estructuras de datos se realizan mejor con métodos estáticos.

  • Si su clase requiere almacenar información importante en múltiples variables, limitando el acceso a los recursos (por ejemplo, limitando el número de transacciones simultáneas en la base de datos o limitando el número de llamadas de red simultáneas), donde frecuentemente asigna y desasigna recursos (administra la memoria en tiempo de ejecución), entonces es mejor use una clase Singleton (por ejemplo, una clase para acceder a estructuras db, administrar recursos de red, etc.)


La principal diferencia entre static y singleton es que Singleton puede implementar Protocols y derivar de algunas clases base. En el caso de Singleton , la clase se puede instanciar pero solo una vez. Static funciones Static se pueden usar directamente sin instanciación.

Entonces, si desea crear una clase para métodos de utilidad, debe ser una clase con funciones de utilidad estáticas y no singleton. Tanto la clase estática como la singleton pueden implementarse con seguridad de subprocesos.