2016-07-23 21 views
0

私は、1つのグローバル構造内で定数にアクセスするView Controllerを2つ持ち、別々のファイルで定義します。次のような構造がある:今すぐSwift:グローバル構造内の静的フィールドの寿命

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 
      ] 
     } 
    } 
} 

、1つのVCから、私のアプリのFAQを制御し、私はConstants.FAQとその中のすべてのデータにアクセスします。 ヒントを扱う別のVCからは、Constants.Tipsにアクセスします。

今、私の質問に。 Q&A View ControllerがOSによってメモリから削除されると、FAQ構造の寿命はどうなりますか?アプリの生涯にわたって記憶に残っていますか?

例: FAQ VCが作成され、実行が開始されます。 FAQ VCはConstants.FAQ.General.QUESTIONSにアクセスし、その処理を行います。さて、FAQ VCは実行を停止し、メモリから削除されます。 しばらくすると、FAQヒントが作成され、実行が開始されます。 Constants.Tips.General.QUESTIONSにアクセスして処理を行います。 この時点で、Constants.FAQ.General.QUESTIONS文字列配列はまだメモリ内にありますか?それとも、それは寿命が限られているのですか?それはFAQ VCでのアクセスです。

もう1つの質問ですが、私はそれに取り組んでいます。

ありがとうございました。

答えて

0

定数()の作成方法によって異なります。 'let constants = Constants() `が参照を保持しているので、それが定義されている同じモジュール内のファイルスコープで完了していれば、それは決して消えません。

1

この構造体とすべてのサブ構造体と静的メソッドは、アプリケーションの起動時に定義され、アプリケーションが実行されている間存在します。

2番目の質問に答えるには、これは一般的には良い方法ではありません。大域データは、一般にエラーが発生しやすく、変化に強く、テストするのが困難です。あなたの場合、データは静的であり、グローバル共有データの問題のいくつかを回避します。

通常、データは別のデータファイルに保存され、実行時にロードされます。プロパティを設定するか、メソッド呼び出しを使用して、各ビューコントローラにデータを渡すと便利です。

jsonまたはplistを配列または辞書にロードし、データを解析してこの構造のインスタンスにすることを検討してください。

関連する問題