当我尝试在多达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中删除它们。