gpt4 book ai didi

ios - UIKit 和 GCD 线程安全

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:16 28 4
gpt4 key购买 nike

许多帖子都说 UIKit 完全不是线程安全的。现在,在 GCD 的 Apple 文档中,我们可以读到它是非线程安全的绘图。那么像这样的代码就可以了吗:

dispatch_async( ^{

//do some work
if(!self.window.rootViewController.presentedViewController && )
[self.window.rootViewController class] == anotherClass)
{
dispatch_async(dispatch_get_main_queue(), ^{ //do some work });
}

});

最佳答案

我个人的看法是,到目前为止您所听到的内容具有误导性。

这里引用自 Apple 的 UIKit Framework Reference ,归功于类似的线程here :

Note: For the most part, UIKit classes should be used only from an application’s main thread. This is particularly true for classes derived from UIResponder or that involve manipulating your application’s user interface in any way.

另请注意,根据 release notes found here,从 iOS4 开始,与您假设的相反,

Drawing to a graphics context in UIKit is now thread-safe. Specifically:

  • The routines used to access and manipulate the graphics context can now correctly handle contexts residing on different threads.
  • String and image drawing is now thread-safe.
  • Using color and font objects in multiple threads is now safe to do.

事实上,在 WWDC 2012 session “构建并发用户界面”中,Apple 工程师还演示了在后台线程中绘制到图像图形上下文

我的收获:

  • 您可以使用多线程绘图,但不要假设任何东西。仅使用 Apple 明确声明的内容。
  • 同样,不要假设任何事情。不要触及任何从后台线程继承自 UIResponder 的 UIKit 内容。

关于ios - UIKit 和 GCD 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299842/

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