2009-10-04 104 views
3

苹果文档指出,通常Quartz2D是thread-safe。但是,在NSOperation期间绘制到图像上下文时,我遇到了崩溃(EXC_BAD_ACCESS)。iPhone上的螺纹图

这是我的当前设置:

UIGraphicsBeginImageContext(imageSize); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
// drawing code 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

我怀疑崩溃都与当前上下文作为UIGraphicsGetCurrentContext实况指出,它需要从main thread调用。它是否正确?有没有其他方法来获取图像上下文?

+1

不,这是不正确的,文件决定谎言给你的纯粹的乐趣... – 2009-10-04 20:12:04

回答

3

您已回答了您自己的问题。文档说你必须在主线程上调用UIGraphicsGetCurrentContext(),你没有这样做,并且你的应用程序崩溃了。 QED。

+0

谢谢你的回答。什么是正确的方法来做到这一点?我目前正在研究CGBitmapContextCreate。 – 2009-10-04 19:50:38

+0

这样做的正确方法是将UIGraphicsGetCurrentContext分解为您将在主线程上运行的单独调用,并将图形上下文存储到另一个线程将从创建返回时使用的类变量中。 – 2009-10-04 22:08:07

+0

@ Kendall-Helmstetter-Gelner这将是一个极其糟糕的主意。这不是专门用于后台线程的API。您的建议留下了一些非常粗糙的竞赛条件 – 2009-10-04 23:36:44

4

各种UIGraphics函数大多只是低级函数的简便方法。阅读CGGraphicsContext以及如何创建自己的;该文档非常有帮助。