gpt4 book ai didi

iphone - 此应用程序正在从后台线程修改自动布局引擎,这可能会导致引擎损坏和奇怪的崩溃

转载 作者:行者123 更新时间:2023-12-03 18:14:26 25 4
gpt4 key购买 nike

当我在模拟器中运行应用程序时,我在控制台中收到此日志。在 iOS 8 中没有看到过这个。我不太确定是什么原因造成的。有其他人遇到过同样的问题吗?如果有,是如何解决的?或者有人可以在这方面提供任何帮助吗?

最佳答案

不要从主线程以外的任何地方更改 UI。虽然它可能看起来可以在某些操作系统或设备上运行,但在其他操作系统或设备上则不行,但它必然会使您的应用程序不稳定,并意外崩溃。

如果您必须响应通知(这可能发生在后台),请确保UIKit调用发生在主线程

您至少有以下两个选择:

异步调度

如果您的观察者可以在任何线程上收到通知,请使用GCD(Grand Central Dispatch)。您可以从任何线程监听并执行工作,并将 UI 更改封装在 dispatch_async 中:

dispatch_async(dispatch_get_main_queue()) {
// Do UI stuff here
}

什么时候使用GCD?当您无法控制谁发送通知时。它可以是操作系统、Cocoapod、嵌入式库等。使用GCD将随时随地唤醒。缺点:您发现自己需要重新安排工作。

<小时/>

在主线程上监听

您可以方便地指定您希望在哪个线程上通知观察者,在注册通知时,使用 queue 参数:

addObserverForName:@"notification"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note){
// Do UI stuff here
}

什么时候在主线程上观察?当您既注册又注册时。但是,当您回复通知时,您已经到达了您需要到达的地方。

<小时/>

在主线程上发布通知

[self performSelectorOnMainThread:@selector(postNotification:) withObject:notification waitUntilDone:NO];

混合解决方案不保证仅从所述方法调用观察者。它允许更轻的观察者,但代价是设计的稳健性较差。此处仅作为解决方案提及您可能应该避免

关于iphone - 此应用程序正在从后台线程修改自动布局引擎,这可能会导致引擎损坏和奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31951704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com