2014-11-25 49 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