usleep 在 iOS 中不起作用



我在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),但它没有暂停。拜托,我做错了什么?

你所做的是徒劳的(也是错误的)。接口中的更改在代码中是有序的,但在当前"事务"结束(即代码完成时)之前不会发生。因此,无论等待多长时间,在代码完成之前都不会看到更改。例如:

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

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

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

你说它很好!但是传递给ussleep的5000是5000微秒。只有0.005秒。所以你1)睡眠时间不够长,2)它阻塞了主线程,所以你不会看到界面更新,直到它完成。因此,您将永远不会看到原始值。

调用ussleep不能完成这个任务。它会阻塞主线程,所以你永远无法完成你想要的。

相关内容

  • 没有找到相关文章

最新更新