将以下代码添加到新项目会导致黑屏闪烁。这似乎是由闪屏的淡出动画引起的。不幸的是,漫长的过程必须在主线程上。可以通过延迟来避免它,但它不可靠并延长装载过程。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// A spinner is shown
// This most probably will not cause a black screen
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// [self loadSomething];
// });
// This will not cause a black screen but not suitable for my use
// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// [self loadSomething];
// });
dispatch_async(dispatch_get_main_queue(), ^{
[self loadSomething];
});
}
- (void)loadSomething
{
NSLog(@"start long process");
NSDate *start = [NSDate date];
while (-[start timeIntervalSinceNow] < 5) {
}
}
答案 0 :(得分:0)
考虑为什么它必须在主线程上,并提出一种方法来移动此处理或最小化它。
您应该创建一个根视图控制器,它显示应用程序默认图像并显示该视图控制器(可能带有一些动画或进度指示),直到您的处理完成。
答案 1 :(得分:0)
如果您已经在主线程上,那么就不需要异步获取主线程。
dispatch_async(dispatch_get_main_queue(), ^{
});
应删除上述代码。
如果您想要做某事或加载某些内容,那么您应该使用
<强> performSelectorInBackground 强>
希望这会有所帮助......