当我尝试在多达100个图像上执行旋转屏幕时,CIIImage会泄漏

当我使用下面的方法(在ARC下)内存分配迅速增长到125 Mo以上。

我已经使用CGImage来实现它,但是速度很慢。

imageArray包含125个大小为640×80的UIImage。

-(void)rotateAndTransform{ int j=0; context = [CIContext contextWithOptions:nil]; for(UIImage* item in imageArray) { CGImageRef intermed =[item CGImage]; CIImage *begin = [CIImage imageWithCGImage:intermed]; CGAffineTransform transform = CGAffineTransformMakeRotation(-M_PI/2); CIImage *outputImage = [ begin imageByApplyingTransform:transform]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *newImg = [UIImage imageWithCGImage:cgimg]; CGImageRelease(cgimg); [self.imagesFromExtract addObject:newImg]; j++; } } 

问题可能是这样的

 CIImage *outputImage = [ begin imageByApplyingTransform:transform]; 

分配一个图像,直到自动释放池被耗尽才会被释放,当程序到达空闲循环时会发生这种情况。 没有尝试过你的代码,我可以build议你把内部循环包装在一个

 @autoreleasepool { ... } 

块?

 UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 

是不是一个问题,你正在添加newImg数组,所以它不应该退出方法后被销毁。 问题是

 CIImage *outputImage = [ begin imageByApplyingTransform:transform]; 

,但无论如何,build议使用

 @autoreleasepool { ... } 

很好。

另外,如果不再需要input图像,则可以在创buildnewImg之后尝试从arrays中删除它们。