我目前正在开发一个iOS项目,它取得了很好的进展,但整个内存的事情 在iOS上无法正常工作。
iphone相机记录了一个流。我有一个通过队列执行的捕获方法。 相机图像转换为灰度。它运作良好,但过了一段时间给了一些 内存警告并关闭应用程序,因为它内存不足。
我发现了错误来源
CGColorSpaceRef colorSpaceGray = CGColorSpaceCreateDeviceGray();
CGContextRef newContextGray = CGBitmapContextCreate(baseAddressGray, width, height, 8, width, colorSpaceGray, kCGImageAlphaNone);
CGImageRef GrayImage = CGBitmapContextCreateImage(newContextGray);
UIImage *img= [UIImage imageWithCGImage:GrayImage scale:1.0 orientation:UIImageOrientationRight];
[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:img waitUntilDone:NO];
free(baseAddressGray);
CGColorSpaceRelease(colorSpaceGray);
CGContextRelease(newContextGray);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
所有内容都位于自动释放池中,之后会被耗尽。 作为崩溃源的那条线是
CGContextRef newContextGray = CGBitmapContextCreate(baseAddressGray, width, height, 8, width, colorSpaceGray, kCGImageAlphaNone);
根据我的理解,这里应该没有记忆问题,因为
CGColorSpaceRelease(colorSpaceGray);
CGContextRelease(newContextGray);
被释放。
我在这里做错了什么,或者缺少什么?
答案 0 :(得分:1)
您没有在代码示例的第4行发布GrayImage
。