ios – UIGraphicsBeginImageContextWithOptions和多线程

前端之家收集整理的这篇文章主要介绍了ios – UIGraphicsBeginImageContextWithOptions和多线程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对UIGraphicsBegin ImageContextWithOptions和线程有点困惑,因为根据 UIKit Function Reference UIGraphicsBeginImageContextWithOptions应该只在主线程上调用.当被调用时,它创建一个基于位图的上下文,可以使用CoreGraphics的函数或者像-drawInRect这样的方法来处理:对于UIImage,-drawInRect:withFont:for 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“应该只在主程序中调用线程“,但仍然这样做的工作是完美的,在阅读了一些关于这个主题的小帖子,并与苹果开发者论坛上的其他人讨论,我可以清楚地说明,在UIGraphicsBeginImageContextWithOptions,UIGraphicsPushContext和UIGraphicsPopContext的文档中有什么说是错误的,那些可以调用方法,而在另一个线程中使用的上下文没有问题.所以UIGraphicsBeginImageContextWithOptions,UIGraphicsPushContext和UIGraphicsPopContext是线程安全的.
原文链接:https://www.f2er.com/iOS/329231.html

猜你在找的iOS相关文章