私はインタビューでこの質問をしました。バックグラウンドスレッドにUILabel
を渡すと、どうなるのか知りたいです。GCDまたはNSOperationQueueのバックグラウンドスレッドにUIlabelを渡すとどうなりますか
2
A
答えて
2
2
ラベルがビュー階層内にあるかどうかによって異なります。一般的なルールは、バックグラウンドスレッドによって実行されるコードは、view.addSubview
やlabel.setNeedsLayout
などのようなUI更新を引き起こしてはならないということです。そのスレッドでラベルを使って遊んでも安全です。
バックグラウンドスレッドでlabel.text
を更新しても、ラベルがビューに追加されると、スーパービューのレイアウトが無効になり、UIがそのスレッド内で更新されるため、危険です。
のは、カスタムUILabelクラスは、UIとは何の関係もありませんコンストラクタの動作を消費するいくつかの時間をやっているとしましょう:
class MyFatLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
self.text = "Lorem ipsum"
self.readDataFromDisk() // will block the main thread.
}
}
その後、あなたは別のスレッドでそのラベルを初期化にそれを追加することができますUIを持つユーザーとの対話がブロックされ得ることはありませんので、メイン(UI)スレッドビュー:
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
let label = MyFatLabel(frame: CGRectZero)
dispatch_async(dispatch_get_main_queue()) {
view.addSubview(label)
}
}
かいつまんで、あなたは、しかし、バックグラウンドスレッドであなたを新しいUILabel(または任意のUIResponder)を初期化することができますUIのupdaをトリガするプロパティのいずれかを変更する必要がありますメインスレッド内のスレッド。
関連する問題
- 1. GCDバックグラウンドスレッドに通知する
- 2. GCDをNSOperationqueueに変換する
- 3. エンティティクラスのパラメータをcreateNativeQueryに渡すとどうなりますか?
- 4. ObjectiveCのNSOperationQueueのようなPythonがありますか?
- 5. structをvararg関数に渡すとどうなりますか?
- 6. どのようにNSRunLoopをNSOperationQueueで使用しますか?
- 7. 無効なwidgetvarを渡すとどうなりますか?
- 8. iOS GCDのパフォーマンスはどうですか?
- 9. Objective Cでは、@synchronized()ブロックにnilまたはnullを渡すとどうなりますか?
- 10. vxworksのtaskDelay関数に負の数を渡すと、どうなりますか?
- 11. 私は別のビューコントローラにUILabelにデータ(UILabel)を渡したい
- 12. UILabelのminimumScaleFactorはどのように機能しますか?
- 13. さらに多くのパラメータを渡すとどうなりますか?
- 14. ほとんどのnonUIコードをバックグラウンドスレッドに入れますか?
- 15. UILabelの左右からパディングを行う方法はありますか? UILabelのサブクラス化なし。
- 16. gcc vector :: iteratorを関数に渡すとどうなりますか?
- 17. json_encode()に非結合配列を渡すとどうなりますか?
- 18. 関数に渡された参照パラメータを返すと、内部的にはどうなりますか?
- 19. UILabelのフォントサイズとフォント名はどのように取得できますか?
- 20. double(またはfloat)をintに変換するとどうなりますか?
- 21. コンピュータが「ハング」またはフリーズしたとするとどうなりますか?
- 22. イメージをバックグラウンドスレッドまたはUIスレッドにロードしますか?
- 23. NULLとサイズ0がrealloc()に渡されるとどうなりますか?
- 24. UILabelには選択可能な値がありますか?
- 25. NSOperationQueueエラーCrashlyticsから把握しようとしています
- 26. UILabelとUIImageViewをクリアする方法はありますか?
- 27. カスタムクラスなしでUICollectionViewCellにUILabelをどのように追加しますか?
- 28. どのようにパラメータをクラスに渡すと、そのパラメータがコンストラクタで渡されたときにJFrameが移動するようになりますか?
- 29. グランドセントラルディスパッチ(GCD)には、マルチコアプロジェクトを実行するための実行可能な競合他社はありますか?
- 30. NSOperationQueueと同じ順序でデータを受け取ります。
私はUI要素がメインスレッド上でのみ変更されるべきだと考えています。 http://stackoverflow.com/a/7905497/4475605 – Adrian
これは 'UILabel'で何をしようとしているかによって異なります。 – rmaddy