2014-11-25 40 views
0

我使用下面的代码来创建一个屏蔽的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]; 

} 

回答

2

由于您使用CoreGraphics中,ARC不会为你工作。

您正在使用CGImageCreateWithMask创建/分配。

然后,您需要将其与CGImageRelease一起删除。

+1

感谢信息 – ORStudios 2014-11-25 13:28:07

2

From Apple Documentation

通过用掩模掩蔽图像创建的图像。你有责任通过调用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; 

} 
+0

感谢信息 – ORStudios 2014-11-25 13:28:37

+0

欢迎您:) – 2014-11-25 13:50:32