gpt4 book ai didi

ios - UIGraphicsBeginImageContextWithOptions 和多线程

转载 作者:技术小花猫 更新时间:2023-10-29 10:58:11 25 4
gpt4 key购买 nike

我对 UIGraphicsBeginImageContextWithOptions 和线程有点困惑,因为根据 UIKit Function Reference UIGraphicsBeginImageContextWithOptions 应该只在主线程上调用。当被调用时,它会创建一个基于位图的上下文,可以使用 CoreGraphics 的函数或类似 -drawInRect: for UIImage, -drawInRect 的方法对其进行操作:withFont: 用于 NSString 等等。对于 CoreGraphics 的绘图,一切都很清楚——您将一个正在被操作的 CGContextRef 参数传递给每个函数,但 UIKit 绘图方法使用堆栈中的当前上下文。在 What's New in iOS 4.0 的发行说明中上面写着

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.

到目前为止一切顺利。有趣的是,我有一个项目,我在其中进行了一些密集的绘图,并通过使用 UIGraphicsBeginImageContextWithOptions 创建上下文来创建多个图像,但是当这些操作碰巧更耗时时,我只是移动了绘图在后台线程中,准备就绪后将它们与一些动画一起显示在屏幕上,一切正常 - 没有崩溃,没有泄漏。图像按预期绘制,似乎 UIGraphicsBeginImageContextWithOptions 为后台线程创建了一个上下文,一切似乎都很好。
所以我的问题是:
- 为什么有必要仅在主线程上调用 UIGraphicsBeginImageContextWithOptions,因为它在后台似乎工作正常?
- 如何使用 UIImage-drawInRect: 方法,例如,在后台线程中,我没有当前上下文,而且我似乎无法创建一个,因为我不能在那里调用 UIGraphicsBeginImageContextWithOptions
- 使用 UIKit 的方法处理背景图像的正确方法是什么(我知道我也可以使用 CGBitmapContextCreate,但它既不会将创建的上下文推送到上下文堆栈中,我似乎也无法自己完成为了使用 -drawInRect: UIImage) 的方法?

最佳答案

所以,经过几天的调查,为什么操作 UIKit 上下文是线程安全的,但你似乎无法在除主线程之外的线程中创建一个,因为 UIGraphicsBeginImageContextWithOptions“应该只在主线程上调用”,但仍然可以很好地工作,在阅读了一些关于这个主题的小帖子并与苹果开发者论坛上的其他人讨论后,我可以清楚地说明文档中所说的内容关于 UIGraphicsBeginImageContextWithOptionsUIGraphicsPushContextUIGraphicsPopContextWRONG 并且可以在另一个线程中调用这些方法并使用上下文,而无需问题。所以 UIGraphicsBeginImageContextWithOptionsUIGraphicsPushContextUIGraphicsPopContext线程安全的

关于ios - UIGraphicsBeginImageContextWithOptions 和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931155/

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