2016-07-23 9 views
0

Ich habe zwei View Controller, die auf Konstanten innerhalb einer einzigen globalen Struktur zugreifen, definiert in einer separaten Datei. Die Struktur ist wie folgt:Swift: Lebensdauer des statischen Feldes innerhalb einer globalen Struktur

struct Constants { 
    struct FAQ { 
     struct General { 
      static let QUESTIONS: [String] = [ 
       //Some String questions here 
      ] 
      static let ANSWERS: [String] = [ 
       //Answers here 
      ] 
     } 
     struct Specific { 
      static let QUESTIONS: [String] = [ 
       //Questions 
      ] 
     } 
    } 

    struct Tips { 
     struct General { 
      static let QUESTIONS: [String] = [ 
       //Questions 
      ] 
      static let ANSWERS: [String] = [ 
       //Answers 
      ] 
     } 
    } 
} 

nun von einem VC, die FAQs meiner App zu steuern, greife ich Constants.FAQ und alle Daten in seinem Inneren. Von einem anderen VC, der die Tipps behandelt, greife ich auf Constants.Tips zu.

Nun zu meiner Frage. Was ist die Lebensdauer der FAQ-Struktur, nachdem der FAQ View Controller vom Betriebssystem aus dem Speicher entfernt wurde? Bleibt es für die Lebensdauer der App in Erinnerung?

Um einen Anwendungsfall zu geben, nehmen Sie zum Beispiel: FAQ VC wird erstellt und startet die Ausführung. FAQ VC greift auf Constants.FAQ.General.QUESTIONS zu und bearbeitet sie. Jetzt stoppt FAQ VC die Ausführung und wird aus dem Speicher entfernt. Nach einer Weile werden FAQ-Tipps erstellt und die Ausführung gestartet. Es greift auf Constants.Tips.General.QUESTIONS zu und führt die Verarbeitung aus. Jetzt ist das String-Array "Constants.FAQ.General.QUESTIONS" noch im Speicher? Oder war seine Lebensdauer auf den Zugriff in der FAQ VC beschränkt?

Eine andere Frage, während ich gerade dabei bin: Nutzt diese Art von Struktur gute Praxis?

Danke.

Antwort

0

Es hängt davon ab, wie Constants() erstellt wird. Wenn es im Dateibereich in demselben Modul gemacht wird, das es definiert, wird es niemals verschwinden, da 'let constants = Constants() `einen Verweis enthält.

1

Diese Struktur und alle Unterstrukturen und statischen Methoden werden beim Start der App definiert und existieren so lange, wie die App ausgeführt wird.

Um Ihre zweite Frage zu beantworten, nein das nicht allgemein als gute Praxis angesehen. Globale Daten sind im Allgemeinen fehleranfällig, resistent gegenüber Änderungen und schwer zu testen. In Ihrem Fall sind die Daten statisch, wodurch einige Probleme mit globalen gemeinsamen Daten vermieden werden.

Normalerweise werden Daten in einer separaten Datei gespeichert und zur Laufzeit geladen. Es ist vorteilhaft, die Daten an jeden View-Controller zu übergeben, indem Sie eine Eigenschaft festlegen oder einen Methodenaufruf ausführen.

Ziehen Sie in Betracht, json oder plist in ein Array oder ein Wörterbuch zu laden und analysieren Sie die Daten dann in eine Instanz dieser Struktur.