Ios 目标c-在主线程完全阻塞之前显示加载屏幕
在我的应用程序中,我有两种方法来隐藏和显示名为Ios 目标c-在主线程完全阻塞之前显示加载屏幕,ios,objective-c,multithreading,Ios,Objective C,Multithreading,在我的应用程序中,我有两种方法来隐藏和显示名为 -(void)hideCurrentView -(void)showCurrentView 他们总是被召集在一起。调用hideCurrentView时,我希望开始显示加载屏幕,然后在showCurrentView显示所有必要的ui元素时隐藏此加载屏幕。我的加载屏幕是一个以活动指示器作为子视图的视图。问题是我必须在主线程上执行hideCurrentView和showCurrentView中发生的所有操作。这就是为什么我的加载屏幕永远不会出现的原
-(void)hideCurrentView
-(void)showCurrentView
他们总是被召集在一起。调用hideCurrentView时,我希望开始显示加载屏幕,然后在showCurrentView显示所有必要的ui元素时隐藏此加载屏幕。我的加载屏幕是一个以活动指示器作为子视图的视图。问题是我必须在主线程上执行hideCurrentView和showCurrentView中发生的所有操作。这就是为什么我的加载屏幕永远不会出现的原因:-(
我尝试将show loading screen方法放在后台线程中:
-(void)hideCurrentView {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, (unsigned long)NULL), ^(void) {
[self showLoadingScreen];
});
[self performSelectorOnMainThread:@selector(hideCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}
-(void)showCurrentView {
[self performSelectorOnMainThread:@selector(showCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}
这不起作用。加载屏幕从不显示,因为主线程被阻塞。我也尝试直接在主线程上显示加载屏幕,但它也不起作用
有人能告诉我,在执行ui操作之前,如何显示加载屏幕,然后在所有ui操作完成后再次隐藏它吗
感谢您的帮助!如果您只是添加子视图,则不应在后台线程中调用
showLoadingScreen
。(或更一般地操作UI)
我猜你的
hideCurrentViewOnMainThread
中有一些东西与UI无关,它会阻止主线程,而这部分代码应该在另一个线程中运行。是的。永远不要阻止主线程。如果你:你做得不对IOS也不喜欢它BTW为什么你认为你必须做阻止的事情主线程上的y?我认为performSelectorOnMainThread会阻止主线程,直到所有事情都完成。我在hideCurrentView和showCurrentView中所做的只是添加和删除子视图以及执行一些视图动画。在我的建议中,我真的应该在主线程上执行这些操作。