Unterschied zwischen der statischen Funktion und der Singleton-Klasse in swift [closed]

8

Ich möchte eine Klasse erstellen, in der alle Hilfsmethoden beibehalten werden und diese Methoden in der gesamten App verwendet werden.
Problem: 1
Es ist gut, eine Singleton-Klasse zu erstellen und alle notwendigen Methoden beizubehalten, oder ich sollte eine Klasse erstellen, in der alle Funktionen statisch sein sollen.
Problem: 2
Was ist der Hauptunterschied zwischen beiden in Swift?
Problem: 3
Wie wird sich die Leistung in iOS auswirken?

    
Sunil Sharma 14.06.2016, 08:39
quelle

3 Antworten

13

Sicher klingt das verwirrend und kann diskutiert werden. Aus den Best Practices kann ich jedoch einige Vorschläge machen.

Singleton wird normalerweise verwendet, um beispielsweise eine ressourcenintensive und eine Timer-Initialisierung zu erstellen: einen Datenbank-Connector, einen Login-Handler und so weiter.

Dienstprogrammklasse sind Klassen, die nur statische Funktionen und Variablen haben. Es sollte nicht mit asynchronen Aufgaben und kostspieligen Ressourcen umgehen, wie das Öffnen eines Datenbankconnectors.

Wenn das Dienstprogramm einen ressourcenintensiven Prozess durchführt, ist es in Ihrem Fall besser, es in einen Singleton umzuwandeln. Wenn nicht, dann sind statische Funktionen in einer Klasse meiner Meinung nach besser. Dies liegt auch daran, dass Swift alle statischen Funktionen in einer Klasse mit static dispatch versendet. Während dies in Singleton nicht wahr sein kann, obwohl Swift gerne optimiert.

Static Dispatch ist viermal schneller als Dynamic Dispatch , sofern die Objective-C-Laufzeit verwendet wird. Dies gilt auch für Swift. Es dauert jedoch nur 4 Nano-Sekunden, um Dynamicly zu versenden.

Ich hoffe, das macht Sie klar.

    
kandelvijaya 14.06.2016, 12:36
quelle
16

Sagen wir, wir haben zwei Klassen.

Klasse mit allen statischen Methoden und statischen Variablen Auf diese Weise können Sie auf die Klassenmethoden zugreifen, ohne ein Objekt zu instanziieren. Wenn kleine Datenhandles erforderlich sind, können sie auch in statischen Variablen gespeichert werden. Alle Threads, die auf diese Klasse zugreifen, würden nicht zu doppelten Instanzen von Datenvariablen führen.

Singleton-Klasse Diese Klasse hat eine private init-Methode und teilt eine einzelne Instanz über eine statische Instanz. Alle Threads, die auf die Instanz zugreifen, würden nicht zu doppelten Instanzen von Datenvariablen führen.

Technisch gesehen mögen sich beide für Ihr Szenario einer Utility-Klasse sehr ähnlich anhören und es kann verwirrend sein, eine Entscheidung zu treffen. Sie können die folgenden Anwendungsfälle verwenden, um eine Entscheidung zu treffen.

  • Definiert diese Klasse hauptsächlich logische Implementierungen? Wenn der Hauptzweck von Klassenmethoden darin besteht, logische Berechnungen / Manipulationen oder Operationen bereitzustellen, die nicht das Speichern von Daten in Variablen neben temporären Handles erfordern, sollten Sie immer eine statische Klasse wählen. Für z.B. Dienstklasse, die Sie hier erwähnt haben. Utility-Methoden wie das Ändern der Größe eines Bildes, das Lesen einer Datei oder das Analysieren von Datenstrukturen werden am besten mit statischen Methoden durchgeführt.

  • Wenn Ihre Klasse wichtige Informationen in mehreren Variablen speichern muss, den Ressourcenzugriff einschränken (z. B. Begrenzung der Anzahl gleichzeitiger Transaktionen in der Datenbank oder Begrenzung der Anzahl gleichzeitiger Netzwerkaufrufe), Ressourcen häufig zuweist und freigibt (verwaltet den Speicher bei Laufzeit) dann ist es am besten, eine Singleton-Klasse zu verwenden (z. B. Klasse für den Zugriff auf db-Strukturen, Verwalten von Netzwerkressourcen, etc ..)

chejaras 14.06.2016 09:58
quelle
5

Hauptunterschied zwischen static und singleton ist, dass Singleton implementiert werden kann Protocols und von einigen Basisklassen abgeleitet werden kann. Im Fall von Singleton kann die Klasse instanziiert werden, aber nur einmal. Static Funktionen können direkt ohne Instanziierung verwendet werden.

Wenn Sie also eine Klasse für Utility-Methoden erstellen wollen, sollte es eine Klasse mit statischen Utility-Funktionen und nicht Singleton sein. Sowohl statische als auch Singleton-Klassen können threadsicher implementiert werden.

    
Vishnu gondlekar 14.06.2016 09:23
quelle