2016-09-21 7 views
2

UIエクスペリエンスを向上させるために、ほとんどの非UIコードをバックグラウンドスレッドに入れておくことをお勧めしますか?特にViewDidLoadでは?以下は私のviewDidLoadコードがあると私は、操作の遅れが画面のレンダリング時に私は、バックグラウンドスレッドに移動操作バックグラウンドスレッドほとんどのnonUIコードをバックグラウンドスレッドに入れますか?

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Put this in background thread? 
    placesClient = GMSPlacesClient.sharedClient() 

    // Put this in background thread? 
    postDescriptionTxtView.delegate = self 

    // Put this in background thread? 
    let hideTap = UITapGestureRecognizer(target: self, action: #selector(myVC.hideKeyboard)) 
    hideTap.numberOfTapsRequired = 1 
    view.userInteractionEnabled = true 
    view.addGestureRecognizer(hideTap) 

    whiteViewForEditImgBtn.layer.cornerRadius = whiteViewForEditImgBtn.frame.width/2 
    whiteViewForEditImgBtn.layer.masksToBounds = true 

    selectedImageView.image = imageFromPreviousVC 

    contentView.backgroundColor = COLOR_BACKGROUND_POSTVC 
    postBtn.backgroundColor = COLOR_BUTTON 
    topView.backgroundColor = COLOR_NAVIGATION_BARTINT 
} 
+3

私はあなたのロジックを理解していますが、これは少し遠すぎるかもしれないと思います!アップルのガイドラインによると、UIアップデートのパフォーマンスにかなりの影響を与えるプロセスがあるとしたら(それはやや主観的ですが、私たちはその意味を理解していると思います)、バックグラウンドキューの使用について考えるべきです。さもなければ、わずかな限界利益のためにあなたのアプリに複雑な負荷が加わるかもしれません! – Sparky

答えて

3

を置くことができると思う場所についてのコメントだけの状況でユーザーエクスペリエンスを向上させてきました。これは、2つの状況、すなわち、CPU集約型動作であり、動作が待機状態になる(例えば、ネットワーク要求が完了するのを待つ。

私たちがUIスレッドからそれを移動することを検討するために、CPU集約型の操作がどの程度必要であるかを推定できます。 1.3GHzのコア速度と60のFPSレートを仮定すると、2つの連続するフレームをレンダリングする間に約200万のCPUサイクルがあります。操作にそれよりも大幅に多くのサイクルが必要な場合は、別のスレッドに移動することを検討することができます。

対照的に、ネットワーク待機による操作は予測が困難なため、UIスレッドで実行する必要はありません。

あなたの例はおそらく約100の命令に収まるでしょう。その命令は、それが呼び出したメソッドの一部として実行された命令を数えます。あなたの例ではネットワークコールが行われないので、バックグラウンドスレッドに移動すると、無駄な複雑さがもたらされます。

関連する問題