我有UIView *loadingView
,只有黑色BG和UIActivityIndicator
。我想将此添加到我的视图中,然后将线程休眠几秒钟:
[self.window addSubview:loadingView];
loadingView.hidden=NO;
sleep(2);
显然,这还没有足够的时间来添加视图 - 线程休眠但视图没有被添加,并且仅在2秒后出现。所以我试过这样的事情:
-(void)sleep
{
sleep(2);
}
[self.window addSubview:loadingView];
loadingView.hidden=NO;
[self performSelector:@selector(sleep) withObject:nil afterDelay:0.01];
这将显示睡眠前的视图,这是所需的结果。但是,在这3行中,有几行代码在睡眠之后我不想执行,在0.01秒内,所有这些行都被执行。
答案 0 :(得分:2)
为什么你在主线上睡2秒钟?通常这是一个可怕的想法,因为你的应用程序将在2秒内完全没有响应。
您使用performSelector:withObject:afterDelay:
时有正确的想法。但是没有办法解决这个问题:如果你想在延迟之后发生某些事情,那么它必须进入延迟后调用的方法。只需在sleep()
之后移动其他代码行。
(实际上,如果你想在两秒钟之后发生一些事情,只需使用performSelector:withObject:afterDelay:
,延迟两秒。)
答案 1 :(得分:-1)
我最后这样做了:
-(void)addLoadingView
{
[self.window addSubview:loadingView];
loadingView.hidden=NO;
}
//some function...
[self performSelectorInBackground:@selector(addLoadingView) withObject:nil];
sleep(2);
我是线程新手,我在这里做的安全吗?