将大多数非UI代码放在后台线程中以改善UI体验是一个好主意吗?特别是在ViewDidLoad中?下面是我的viewDidLoad代码,我已经评论了我认为我可以放置后台线程
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
}
答案 0 :(得分:3)
仅在操作延迟渲染屏幕的情况下,将操作移动到后台线程才能改善用户体验。这种情况发生在两种情况下 - 当操作是CPU密集型时,以及当操作进入等待状态时,例如,等待网络请求完成。
我们可以估计一个操作需要CPU占用多少,以便我们考虑将其从UI线程中移除。假设1.3 GHz的核心速度和60的FPS速率,我们在渲染两个连续帧之间有大约2,000,000个CPU周期。如果您的操作需要比此更多的周期,您可以考虑将其移动到单独的线程中。
相比之下,使用网络等待的操作可能需要不可预测的长时间才能完成,因此应该避免在UI线程上运行它们。
您的示例可能适合大约100条指令,计算作为其调用的方法的一部分执行的指令。由于您的示例也没有进行网络调用,因此将其移至后台线程会引入不必要的复杂性,而不会提供任何回报。