2017-08-01 17 views
-1

ちょっと一般的な質問です。私のプロジェクトでは、ユーザーの選択した設定に基づいてUIを変更するために、10種類の迅速なタイマーを使用しています。設定はキーに保存され、タイマーは毎秒の読み取りに使用されます。これは、問題は、34%のCPU、高エネルギー、20%のオーバーヘッドを使用して私のアプリになります。ユーザーがアプリの設定を変更したかどうかをチェックし、結果としてさまざまなビューコントローラを更新するかどうかを確認する代替方法があるかどうか疑問に思っていました。すぐにタイマーを使用する代わりに

+1

研究代表者と「NotificationCenters」。タイマーはこのための非常に貧しい解決策です。 – Slayter

+0

はい、別の方法があります。私の質問は、これらの設定は、アプリまたは設定アプリを介して制御されていますか? –

答えて

0

一部の変数が変更されたかどうかを定期的に確認する機能は、実際には悪いことです。

自動UI更新を実現する方法はいくつかあります。これらの方法の1つが以下に説明されている。

Swiftは、プロパティ/変数が変更されたときにシステムによって自動的に呼び出されるプロパティオブザーバを持っています。あなたが行う必要があるのは、データをUIに供給し、プロパティオブザーバー内部からUIを更新するために使用するプロパティごとにプロパティオブザーバを設定することだけです。

labelAのデータを保存するために使用する変数aがあるとします。以下は、テストされて動作するPlaygroundの例です。

class MyViewController: UIViewController { 
    var label:UILabel = UILabel(frame: CGRect(x: 20, y: 20, width: 100, height: 30)) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     label.text = a 
     label.textColor = .black 
     self.view.addSubview(label) 
     view.backgroundColor = .white 
    } 

    var a = "first" { 
     didSet { 
      label.text = a 
     } 
    } 
} 

let myVC = MyViewController() 
PlaygroundPage.current.liveView = myVC 
sleep(10) 
myVC.a = "new value" 

あなたは、変数aの値を変更した場合、ラベルのテキストが自動的に変更されていることがわかります。

0
  1. あなたのアプリのすべての設定を提供するシングルトンパターンを使用してSettingsクラス/構造体を作成します。

  2. Settingsには、プロパティ変更時にデータストア(ユーザーデフォルト/コアデータ/クラウドストレージ)を更新するためにdidSetを使用してください。

  3. 変更内容をすぐにGUIに反映させるには、View Controllerのキー値監視を使用します。

関連する問題