【问题标题】:EXC BAD ACCESS from CoreGraphics API in NSOperationNSOperation 中来自 CoreGraphics API 的 EXC BAD ACCESS
【发布时间】:2011-01-09 15:44:54
【问题描述】:

我正在尝试使用 MacRuby 在 NSOperation 中进行一些 CoreGraphics/CoreImage 操作。我有一些 API 调用将源文件读入 CG 并设置 CGImageDestination。

如果我将以下代码放入 NSOperation.init 中,一切正常:

@dest = CGImageDestinationCreateWithURL(@photo.output_url, "public.jpeg" , 1, nil);
@context = CIContext.alloc.init

@cgOriginalImgSrc = CGImageSourceCreateWithURL(@photo.url, nil)
@cgOriginal       = CGImageSourceCreateImageAtIndex(@cgOriginalImgSrc, 0, nil)    

但是,如果我将相同的代码放入 NSOperation 的主函数中,我会得到零星的 EXC_BAD_ACCESS 错误。并且仅在将 NSOperation 传递给 NSOperationQueue 时;如果我自己调用 main,它工作得很好。

在我正在运行的主要部分结束时:

CFRelease(@dest)    
CFRelease(@cgOriginalImgSrc)
CGImageRelease(@cgOriginal)

更奇怪的是它在 init 中工作,即使 init 不是从主线程调用的(所以不是主线程/后台线程问题,我猜)

有什么想法吗?

【问题讨论】:

    标签: core-graphics nsoperation nsoperationqueue macruby core-image


    【解决方案1】:

    看起来您的一个线程正在引用一个不再存在于内存中的对象。尝试删除

    CFRelease(@dest)    
    CFRelease(@cgOriginalImgSrc)
    CGImageRelease(@cgOriginal)
    

    看看情况如何。您也可以尝试验证每个队列中的对象以查看它们是否仍然可用。最后,您可以使用 macrubyd(MacRuby 的调试器)来查看发生了什么,甚至可以使用 GDB 并粘贴回溯,以便我们查看问题所在。

    谢谢,

    • 马特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多