Tak*_*ara 6 memory iphone memory-leaks uiimage cfdata
我一直在寻找解决方案来解决下面的问题,但找不到.我做了过滤方法来修改HSV值UIImage.这种方法工作正常,但是当我使用这种方法时,使用的内存会长大,无法释放.在Instruments的"Live Bytes"框中,我发现CFData(store)的值为每次过滤增加了几MB.我怎么才能释放他们?我发现了类似的问题,但对这个问题不太好.谢谢.
//Objective-C
- (UIImage*)addFilter:(UIImage*)img{
CGImageRef imgRef = img.CGImage;
//getting size
size_t width = CGImageGetWidth(imgRef);
size_t height = CGImageGetHeight(imgRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(imgRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imgRef);
size_t bytesPerRow = CGImageGetBytesPerRow(imgRef);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(imgRef);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imgRef);
bool shouldInterpolate = CGImageGetShouldInterpolate(imgRef);
CGColorRenderingIntent renderingIntent = CGImageGetRenderingIntent(imgRef);
CGDataProviderRef dataProvider = CGImageGetDataProvider(imgRef);
CFMutableDataRef *data = CGDataProviderCopyData(dataProvider);
UInt8 *buf = (UInt8 *)CFDataGetMutableBytePtr(data);
double h,s,v;
double c;
double cmax,cmin;
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
/////////////////////
///change HSV value//
/////////////////////
}
}
CFDataRef filterData = CFDataCreate(NULL, buf, CFDataGetLength(data));
CGDataProviderRef filterDataProvider = CGDataProviderCreateWithCFData(filterData);
CGImageRef filterCgImage = CGImageCreate(
width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow,
colorSpace,
bitmapInfo,
filterDataProvider,
NULL,
shouldInterpolate,
renderingIntent
);
UIImage *imgFinal = [UIImage imageWithCGImage:filterCgImage];
CFRelease(filterData);
CGImageRelease(filterCgImage);
CGDataProviderRelease(filterDataProvider);
CFRelease(data);
return imgFinal;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |