我有UIScrollView
。当它完成减速时,我需要创建一个UIViewController
的新实例。问题是,虽然这是创建(大约需要1秒),但我无法滚动,我的UI感觉不那么流畅。我正在考虑在后台线程中创建这个视图控制器。这是个好主意吗?在创建它之后我还需要做一些工作,这项工作必须在主线程上完成。如果我在创建控制器的方法上使用dispatch_async,然后使用dispath_sync(主队列)进行我必须在视图控制器上完成的工作,dispatch_sync会等到我的异步工作完成后才执行吗?
tl; dr我在scrollViewDidEndDecelerating中做了很多工作,但它导致我的scrollview滚动性能不佳。如何提高性能?
样品:
- scrollViewDidEndDecelerating {
dispatch_async(background) {
[self createVC];
[self performSelectorOnMainThread:(setupView)];
}
}
答案 0 :(得分:0)
需要更多代码哟看看为什么你的scrollView在你启动UIVIewController时停止了,但顺便说一下:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
// This is happening in the background thread.
// create view controller
dispatch_async(dispatch_get_main_queue(), ^{
// This is happening on the main thread; all UI updates must happen here.
// here setup view
});
});
你也可以在初始化scrollView时创建ViewController并将其保存在局部变量中,当它减速时,只需设置你的视图。
答案 1 :(得分:0)
是的,你可以使用dispatch_async创建你的UIViewController,当你完成创建视图控制器时,使用performSelectorOnMainThread在mainthread上执行你的操作并将你的视图控制器添加到你的scrollView。
使用performSelectorOnMainThread
[self performSelectorOnMainThread:@selector(setupView) withObject:(id) waitUntilDone:YES/NO];
是/否取决于您的要求