我对iOS编程非常陌生,但我已经遇到了一个无法解决的大问题.看起来很容易.
我有一个按钮,我点击它来更改一个名为的标签 message
这是代码:
- (IBAction)react:(id)sender {
int hasard ;
hasard=3;
message.text=[NSString stringWithFormat:@"1 %d",hasard];
sleep (1);
message.text=[NSString stringWithFormat:@"2 %d",hasard];
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我没有看到第一个message.text变化.当我点击按钮时,我必须等待一秒钟才会看到2 3
我以为我能看到1 3,等一下,然后看2 3.缺什么?这似乎很明显.
sleep()将暂停当前线程执行,这是主线程,因此您将阻止所有UI操作,直到方法完成.您需要安排第二个分配在指定时间后运行,而不会阻止当前运行循环.这可以通过GCD实现.
- (IBAction)react:(id)sender {
int hasard ;
hasard=3;
message.text=[NSString stringWithFormat:@"1 %d",hasard];
int64_t delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
message.text=[NSString stringWithFormat:@"2 %d",hasard];
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |