【问题标题】:Threaded drawing on the iPhoneiPhone上的线程绘图
【发布时间】:2009-10-04 17:34:20
【问题描述】:

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

这是我目前的设置:

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

我怀疑崩溃与当前上下文有关,因为 UIGraphicsGetCurrentContext 文档声明它需要从 main thread 调用。它是否正确?还有其他获取图像上下文的方法吗?

【问题讨论】:

  • 不,这是不正确的,文档决定对你撒谎只是为了好玩……

标签: iphone cocoa-touch multithreading quartz-2d nsoperation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答。正确的方法是什么?我目前正在研究 CGBitmapContextCreate。
    • 正确的做法是将 UIGraphicsGetCurrentContext 分解为一个单独的调用,您将在主线程上运行,并将图形上下文存储到另一个线程将在返回时使用的类变量中从创建。
    • @Kendall-Helmstetter-Gelner 那将是一个非常糟糕的主意。这根本不是为从后台线程使用而设计的 API。你的建议留下了一些非常棘手的比赛条件
    • 很抱歉没有尽快回复这个问题。我现在正在使用 CGBitmapContextCreate,它似乎已经为我解决了这个问题。不知道为什么我之前没有遇到这个功能。可能是在寻找错误的东西。谢谢大家的回答!
    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多