当使用带有EAGLContext的CIContext时,我在iOS 9.2上遇到了巨大的内存泄漏。我已经看到有关在iOS 9.1上解决此问题的报道,但我无法确认。有没有人成功地能够在iOS 9.1或更高版本中删除由CIContext drawImage,createCGImage和渲染引起的内存泄漏?
上查看此问题我已经通过使用MetalKit和MLKDevice测试了丢弃EAGLContext。我已经使用不同的CIContext方法测试过,比如drawImage,createCGImage和render,但似乎没什么用。
很明显,这是iOS 9.2中的一个错误。从Apple下载示例应用程序(见下文),然后在iOS 8.4设备上运行相同项目,然后在iOS 9.2设备上运行,并注意Xcode中的内存量表。
将其添加到APLEAGLView.h:20
@property (strong, nonatomic) CIContext* ciContext;
用此
替换APLEAGLView.m:118[EAGLContext setCurrentContext:_context];
_ciContext = [CIContext contextWithEAGLContext:_context];
最后用这个
替换APLEAGLView.m:341-343glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
@autoreleasepool
{
CIImage* sourceImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:kCIInputImageKey, sourceImage, nil];
CIImage* filteredImage = filter.outputImage;
[_ciContext render:filteredImage toCVPixelBuffer:pixelBuffer];
}
glBindRenderbuffer(GL_RENDERBUFFER, _colorBufferHandle);