usleep在iOS中不起作用

时间:2016-10-17 18:07:33

标签: ios swift usleep

我在iOS中遇到问题。绿色ViewController应该在几秒钟后变为红色,我有这个代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let ZeitZahl = arc4random_uniform(1499) + 6000
    usleep(ZeitZahl)
    update()
}

func update(){
    self.view.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1.0)
}

转向红色本身效果很好!但它没有延迟,它直接转向红色!我已使用usleep(5000)代替usleep(ZeitZahl)进行了尝试,但它没有暂停。拜托,我做错了什么?

2 个答案:

答案 0 :(得分:2)

你正在做的事是徒劳的(和错误的)。界面中的更改已订购,但在当前"事务"之前不会发生结束,即代码完成时。因此,无论您等待多久,在代码完成之前,您都不会看到更改。例如:

    usleep(bigNumber)
    self.view.backgroundColor = .red
    usleep(bigNumber)
    self.view.backgroundColor = .green

无论bigNumber有多大,您永远不会看到任何红色。

但是,您根本不应该使用usleep。你正在阻止主线程。这冻结了界面,看门狗进程将杀死你的应用程序死亡作为惩罚。

答案 1 :(得分:0)

你说的很好!但5000传递给我们的是5000微秒。那只有0.005秒。所以你1)没有睡得足够长,2)它会阻塞主线程,所以你不会看到界面更新,直到它完成。所以你永远不会看到原来的价值。

虽然打电话给我们睡觉也不会这样。它会阻止主线程,所以你永远不会完成你想要的。