ちょっと一般的な質問です。私のプロジェクトでは、ユーザーの選択した設定に基づいてUIを変更するために、10種類の迅速なタイマーを使用しています。設定はキーに保存され、タイマーは毎秒の読み取りに使用されます。これは、問題は、34%のCPU、高エネルギー、20%のオーバーヘッドを使用して私のアプリになります。ユーザーがアプリの設定を変更したかどうかをチェックし、結果としてさまざまなビューコントローラを更新するかどうかを確認する代替方法があるかどうか疑問に思っていました。すぐにタイマーを使用する代わりに
-1
A
答えて
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
あなたのアプリのすべての設定を提供するシングルトンパターンを使用して
Settings
クラス/構造体を作成します。Settings
には、プロパティ変更時にデータストア(ユーザーデフォルト/コアデータ/クラウドストレージ)を更新するためにdidSet
を使用してください。変更内容をすぐにGUIに反映させるには、View Controllerのキー値監視を使用します。
関連する問題
- 1. スレッドの代わりに。タイマー?
- 2. タイマーの代わりに、TimerTaskを
- 3. XSSを防ぐためにc:outを使用する代わりに
- 4. トーストを使用する代わりに
- 5. 代わりにパーシャルビューコントローラを使用する
- 6. pxにマイナスを使用する代わりに使用する
- 7. Wordpressはすぐに使用できるrest-apiを無効にし、代わりにライブラリを使用します
- 8. 代わりに使用するフォント
- 9. //使用する代わりに、プロトコル://
- 10. divの代わりにdivの代わりにJSのプリペンドを使用する
- 11. javascript eventlistenerイベントの代わりにすぐに起動する
- 12. プロンプトを使用する代わりにフォームデータを使用する
- 13. Railsの代わりにsend_fileの代替ファイルを使用する
- 14. 代わりにstdoutを慣用的に使用する
- 15. CDIで使用する代替Webフレームワーク(JSFの代わりに)
- 16. クラスの代わりにコレクションを使用
- 17. Submitの代わりにButtonを使用
- 18. expand.gridの代わりにouterを使用
- 19. NotImplementedError:モジュールCrypto.Signature.pkcs1_15を代わりに使用
- 20. VARCHAR2の代わりにCLOBを使用
- 21. scrolllistの代わりにフラットリストを使用
- 22. ptの代わりにemを使用
- 23. サテライトアセンブリの代わりにリソースファイルを使用
- 24. リストビューの代わりにaddViewを使用
- 25. JqGrid:editurlの代わりに$ .ajax()を使用
- 26. SaveOrUpdateの代わりにMergeを使用
- 27. すぐに火災タイマー?
- 28. NSWindow setFrame:.. animated:YES]関数をアニメーション化する代わりに、代わりにアニメーションを使用できますか?
- 29. 代わりにEditTextを使用する方法オートコンプリート用のフラグメント?
- 30. Eclipse用のリポジトリを使用する代わりに
研究代表者と「NotificationCenters」。タイマーはこのための非常に貧しい解決策です。 – Slayter
はい、別の方法があります。私の質問は、これらの設定は、アプリまたは設定アプリを介して制御されていますか? –