2016-07-30 5 views
2

Wie deklarieren Sie globale Variablen in Swift am besten? Ich verwende Singletons, um Objekte in Erinnerung zu halten. Außerdem kann ich von überall auf sie zugreifen.iOS: Die beste Methode zum Umgang mit globalen Eigenschaften

Aber da Arrays in thread nicht thread-sicher sind, ist dieses Muster auch gegen Nebenläufigkeit gerichtet? Gibt es bessere Möglichkeiten, z.B. Netzwerkressourcen in globalen Eigenschaften?

z.

class Repository { 

    static let sharedInstance = Repository() 

    var objects:[String] = [] 
} 
+4

nicht auf die Frage, diese gewundenen Methode ein Singleton zu erklären stammt Swift 1.x, wird aber nicht mehr benötigt. Einfach 'class Repository {static let sharedInstance = Repository()}' ist alles was Sie heutzutage brauchen. – Rob

+2

Re Nebenläufigkeit, nein das ist nicht Thread-sicher. Um dies threadsicher zu machen, würden Sie die 'Objekte' privat machen und dann Ihre eigenen Methoden definieren, um das, was synchronisiert wird (GCD oder Sperren), abzurufen und zu aktualisieren. – Rob

+0

Wenn Sie Thread-Sicherheit für den Zugriff auf Eigenschaften oder Arrays benötigen, empfehle ich Ihnen, eine serielle GCD-Warteschlange zu implementieren, um diesen Zugriff zu steuern. –

Antwort

1

Lese ein Array über Threads sicher ist. Es ist die Schreiben, die nicht ist. Unter this question erfahren Sie, wie Sie in threadsicherer Weise auf das Array zugreifen können.

Ihre Methode eine gemeinsame Instanz zu implementieren ist zu ausführlich und wird stattdessen in Swift 3. Verwenden Sie faul Initialisierung veraltet: bei der Hand

class Repository { 
    static var sharedInstance = { Void -> Repository in 
     let tmp = Repository() 
     tmp.objects = ["Hello", "World"] 
     return tmp 
    }() 

    var objects:[String] = [] 
} 
+0

Ist dieses Codebeispiel bezüglich der bearbeiteten oder der ursprünglichen Frage? – midori

+0

Ich habe gelesen, dass 'static let sharedInstance = Repository()' würde implizit mit einem 'dispatch_once' ausgeführt werden – midori

Verwandte Themen