我使用以下代码创建一个蒙版的UIImage。然而,我发现,当我多次运行代码时,内存增加而不是释放。有人可以看到可能存在泄漏的地方吗?
-(UIImage*)processImage:(UIImage *)sourceImage maskImage:(UIImage *)maskImage {
UIImage *editedImage = nil;
UIImage *mask = [self createMaskImage:maskImage canvasImage:sourceImage maskWidth:50 maskHeight:50];
editedImage = [self maskImage:sourceImage withMask:mask];
return editedImage;
}
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
答案 0 :(得分:2)
由于您使用的是CoreGraphics,因此ARC不适合您。
您正在使用CGImageCreateWithMask
创建/分配。
然后您需要使用CGImageRelease
将其删除。
答案 1 :(得分:2)
使用蒙版遮罩图像创建的图像。您负责通过调用CGImageRelease来释放此对象。
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
// Create image from CGImageRef
UIImage *myImage = [UIImage imageWithCGImage:masked];
// Release it
CGImageRelease(masked);
return myImage;
}