web-dev-qa-db-fra.com

Différence entre la fonction statique et la classe singleton dans swift

Je veux créer une classe où toutes les méthodes utilitaires seront conservées et ces méthodes seront utilisées dans toute l'application.
Problème: 1
Est-il bon de créer une classe singleton et d'y conserver toutes les méthodes nécessaires ou dois-je créer une classe où toutes les fonctions seront statiques.
Problème: 2
Quelle est la principale différence entre les deux approches ci-dessus dans Swift?
Problème:
Comment cela affectera-t-il les performances dans iOS?

31
Sunil Sharma

Bien sûr, cela semble déroutant et peut être débattu. Cependant, à partir des meilleures pratiques, je peux mettre quelques suggestions.

Singleton est généralement utilisé pour créer une initialisation intensive de ressources et une minuterie par exemple: un connecteur de base de données, un gestionnaire de connexion et autres.

Classe utilitaire sont des classes qui n'ont que des fonctions et des variables statiques. Il ne doit pas traiter la tâche asynchrone et la gestion coûteuse des ressources comme l'ouverture d'un connecteur de base de données.

Dans votre cas, si l'utilitaire fait un processus gourmand en ressources, il vaut mieux envelopper dans un singleton. Sinon, les fonctions statiques dans une classe sont meilleures à mon avis. Il en va de même parce que, Swift distribuera toutes les fonctions statiques d'une classe en utilisant répartition statique. Alors que cela ne peut pas être vrai dans Singleton bien que Swift aime optimiser.

La répartition statique est 4 fois plus rapide que la répartition dynamique dans la mesure où le runtime Objective-C est utilisé. Cela est vrai pour Swift aussi. Cependant, cela ne prend que 4 nano secondes pour envoyer Dynamiclly.

J'espère que cela vous clarifie.

25
kandelvijaya

Disons que nous avons deux classes.

Classe avec toutes les méthodes statiques et variables statiques De cette façon, vous pouvez accéder aux méthodes de classe sans instancier un objet. De plus, si de petits descripteurs de données sont nécessaires, ils peuvent être stockés dans des variables statiques. Tous les threads accédant à cette classe ne finiraient pas par créer des instances en double de variables de données.

Singleton Class Cette classe aura une méthode d'initialisation privée et partagera une seule instance via une instance statique. Tous les threads accédant à l'instance ne finiraient pas par créer des instances en double de variables de données.

Donc, techniquement, les deux peuvent sembler très similaires pour votre scénario de classe utilitaire et cela peut prêter à confusion pour prendre une décision, vous pouvez utiliser les cas d'utilisation suivants pour prendre une décision.

  • Cette classe définit-elle principalement les implémentations logiques? Si l'objectif principal des méthodes de classe est de fournir des calculs/manipulations ou opérations logiques qui ne nécessitent pas de stocker des données dans des variables en plus des poignées temporaires, vous devez toujours opter pour une classe statique. Par exemple Classe utilitaire que vous avez mentionnée ici. Les méthodes utilitaires comme le redimensionnement d'une image, la lecture d'un fichier, l'analyse d'une structure de données sont mieux effectuées à l'aide de méthodes statiques.

  • Si votre classe nécessite de stocker des informations importantes dans plusieurs variables, en limitant l'accès aux ressources (par exemple, en limitant le nombre de transactions simultanées sur la base de données ou en limitant le nombre d'appels réseau simultanés), où elle alloue et libère fréquemment des ressources (gère la mémoire au moment de l'exécution), il est préférable de utiliser une classe Singleton (pour par exemple la classe pour accéder aux structures db, gérer les ressources réseau, etc.)

28
chejaras

La principale différence entre static et singleton est que Singleton peut implémenter Protocols et dériver de certaines classes de base. Dans le cas de Singleton, la classe ne peut être instanciée qu'une seule fois. Les fonctions Static peuvent être utilisées directement sans instanciation.

Donc, si vous voulez créer une classe pour les méthodes utilitaires, ce devrait être une classe avec des fonctions utilitaires statiques et non singleton. Les classes statiques et singleton peuvent être implémentées en toute sécurité.

7
Vishnu gondlekar