2012-07-26 41 views
0

我将一些OSX代码移植到iOS并需要访问CIImage的字节。 OSX版本使用NSBitmapImageRep来完成此操作,但在iOS上我需要跳过一些循环。访问CIImage字节,崩溃应用程序

这里是我试图运行

CIContext *context = [CIContext contextWithOptions:nil]; 
CGImageRef cgImage = [context createCGImage:image fromRect:image.extent]; 
CGDataProviderRef provider = CGImageGetDataProvider(cgImage); 
CFDataRef data = CGDataProviderCopyData(provider); 

CGRect extent = [image extent]; 
//png.Load((UInt8*)CFDataGetBytePtr(data), extent.size.width, extent.size.height, true); 

CFRelease(data); 
//CGDataProviderRelease(provider); 

它将按预期的代码,但经过一段时间的应用程序崩溃。我不知道为什么。我正在猜测内存泄漏/越界内存。据我可以告诉一切正在被释放正确...如果我评论这些线,没有崩溃。如果我几乎立即评论CGDataProviderRelease在应用程序崩溃。

回答

2

我想你需要CFRelease(cgImage) - 你用“创建”来创建它吗?

+0

我觉得哑巴。这是一个问题。 CFRelease(cgImage)使应用程序更稳定,但我仍然崩溃(但现在需要两倍的时间才能崩溃)。我不知道是否还有其他东西可能会丢失...... – 2012-07-26 19:32:39

+0

使用仪器,泄漏和对象Alloc运行项目。您可能会发现一种泄漏类型的信息。它并不是很难使用。 – 2012-07-26 19:36:07

+0

谢谢戴夫!现在我在仪器仪表方面深陷困境。我想我可以从这里拿走它。 – 2012-07-26 19:47:16