Unterschied zwischen statischer Funktion und singleton-Klasse in swift
Ich soll eine Klasse erstellen, wo alle utility-Methoden bleiben erhalten und werden diese Methoden verwendet werden, überall in der app.
Problem:1
Ist es gut zum erstellen einer singleton-Klasse und halten alle notwendigen Methoden gibt es oder sollte ich eine Klasse erstellen, wo alle Funktion werden statische.
Problem:2
Was ist der Hauptunterschied zwischen den beiden oben genannten Ansätze in swift ?
Problem:3
Wie wird es Auswirkungen auf die Leistung in iOS?
Wie auf der Erde ist dieser Meinung-basierend ??? Wenn Sie nicht wissen, was du redest, nicht in der Nähe Fragen !
InformationsquelleAutor Sunil Sharma | 2016-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, das klingt verwirrend und können diskutiert werden. Jedoch, von den besten Praktiken kann ich einige Vorschläge.
Singleton ist in der Regel verwendet, um eine ressourcenintensive und eine timer-Initialisierung zum Beispiel: eine Datenbank-connector -, login-handler und so.
Utility-Klasse sind Klassen, die nur statische Funktionen und Variablen. Es sollte nicht mit async-task und teure Ressource Handhabung wie das öffnen einer Datenbank-connector.
In deinem Fall, wenn das Dienstprogramm macht ein Ressourcen-intensiver Prozess ist es besser, wickeln Sie Sie in ein singleton. Wenn nicht, dann Statische Funktionen einer Klasse ist besser meiner Meinung nach. Dies ist also auch da, Schnelle Versand alle statischen Funktionen in einer Klasse mit statische Versand. In der Erwägung, dass dies nicht wahr sein kann in Singleton obwohl Swift mag optimiert.
Statische Versand sind 4 mal schneller als Dynamische Dispatch - so weit wie Objective-C runtime verwendet wird. Dies gilt für swift zu. Jedoch, es dauert nur 4 nano Sekunden, um Versand Dynamiclly.
Ich hoffe, das macht Sie klar.
final
oder wenn die gesamte Modul-Optimierung aktiviert ist)Warum sollten Sie nicht haben, asynchrone Aufgaben in einer utility-Klasse? Welche Probleme tut dies verursachen?
Ich habe die gleiche Frage, warum nicht verwenden Sie asynchrone Methoden in der Utility-Klasse?
InformationsquelleAutor kandelvijaya
Können sagen, wir haben zwei Klassen.
Klasse mit statischen Methoden und statischen Variablen
Sie können auf diese Weise die Klasse Methoden ohne Instanzierung eines Objekts. Auch wenn einige kleine Daten verarbeitet werden, erforderlich, Sie können gelagert werden im statischen Variablen. Alle threads Zugriff auf diese Klasse würde nicht enden, doppelte Instanzen von Daten-Variablen.
Singleton-Klasse
Diese Klasse haben ein eigenes init-Methode und teilen Sie eine einzelne Instanz, die durch eine statische Instanz. Alle threads, die Zugriff auf die Instanz würde nicht enden, doppelte Instanzen von Daten-Variablen.
Technisch So können beide sehr ähnlich klingen für Ihr Szenario einer Utility-Klasse und kann es verwirrend sein, eine Entscheidung zu treffen, können Sie folgende use-cases, eine Entscheidung zu treffen.
Funktioniert dieser Klasse in Erster Linie definiert logische Implementierungen? Wenn der primäre Zweck von Klassenmethoden ist die logische Berechnungen/Manipulationen oder Operationen, die nicht erfordern das speichern von Daten in Variablen neben temporären Griffe, dann sollten Sie immer entscheiden Sie sich für eine Statische Klasse. Für z.B. Utility-Klasse, die Sie hier erwähnt haben. Utility-Methoden, wie das ändern der Größe eines Bildes, einer Datei zu Lesen, Parsen, eine Daten-Strukturen sind am besten mit Statischen Methoden.
Wenn Ihre Klasse erfordert die Speicherung der wichtigen Informationen in mehreren Variablen, die Begrenzung der Ressourcen zuzugreifen (z.B. zur Begrenzung der Anzahl von gleichzeitigen Transaktionen auf Datenbank oder Begrenzung der Anzahl der gleichzeitigen Netzwerk nennt), wo es Häufig reserviert und freigibt Ressourcen (verwaltet den Speicher zur Laufzeit) dann Ihr bestes, um die Verwendung einer Singleton-Klasse (z.B. Klasse für den Zugriff auf db-Strukturen, Verwaltung der Netzwerk-Ressourcen, etc..)
Technisch mehr code, den Sie haben, desto größer wird die Größe der ausführbaren und Einfluss auf Ihre app-performance. Aber dies geschieht, wenn Sie schreiben, die großen Lösungen. In solchen Fällen muss der Fokus auf der Verwaltung von execution-und runtime-Speicher von verschiedenen Architektur-alternativen (pluggable Module, service, shared library, etc...). Aber die meisten mobilen Anwendungen fallen nicht in diese Kriterien, so ist es nicht eine große Sorge in den meisten Fällen. Auch die Auswirkungen auf die Leistung des Singleton vs. statische Methode in der utility-Klassen wird nicht anders sein.
Sehen Sie Ihre Antwort ändern irgendwie, wenn wir struct statt einer Klasse (mit allen statischen funcs und Eigenschaften)?
Hi Raul. Struct und class sind im wesentlichen die gleiche in C++. Ich bin nicht sicher, ob Ihre Frage war im Kontext zu switf
InformationsquelleAutor chejaras
Großen Unterschied zwischen
static
undsingleton
ist, dassSingleton
können umgesetztProtocols
und stammen aus einigen Basisklassen. Im Falle vonSingleton
, Klasse instanziiert werden kann, aber nur einmal.Static
Funktionen können direkt verwendet werden, ohne Instanziierung.Wenn Sie So wollen, zum erstellen von Klassen für utility-Methoden sollte es eine Klasse mit statischen utility-Funktionen und nicht-singleton. Die statische und die singleton-Klasse implementiert werden kann, thread-sicher.
InformationsquelleAutor Vishnu gondlekar