ios - 释放CGImageRef以避免内存泄漏

标签 ios objective-c memory-leaks crash cgimageref

我想每秒多次调用图像方法,但出现内存泄漏。

code screenshot

我尝试执行 CFRelease(rawImageRef); 但返回下一个错误:

-[Not A Type retain]: message sent to deallocated instance 0x14dd3770

使用代码更新:

- (CGColorRef)averageColorRect:(CGRect)rect {

    CGImageRef rawImageRef = CGImageCreateWithImageInRect(_imageRaster, rect);

    // This function returns the raw pixel values
    CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(rawImageRef));
    const UInt8 *rawPixelData = CFDataGetBytePtr(data);

    NSUInteger imageHeight = CGImageGetHeight(rawImageRef);
    NSUInteger imageWidth  = CGImageGetWidth(rawImageRef);
    NSUInteger bytesPerRow = CGImageGetBytesPerRow(rawImageRef);
    NSUInteger stride = CGImageGetBitsPerPixel(rawImageRef) / 8;

    // Here I sort the R,G,B, values and get the average over the whole image
    unsigned int red   = 0;
    unsigned int green = 0;
    unsigned int blue  = 0;

    for (int row = 0; row < imageHeight; row++) {
        const UInt8 *rowPtr = rawPixelData + bytesPerRow * row;
        for (int column = 0; column < imageWidth; column++) {
            red    += rowPtr[0];
            green  += rowPtr[1];
            blue   += rowPtr[2];
            rowPtr += stride;

        }
    }
    CFRelease(data);

    CGFloat f = 1.0f / (255.0f * imageWidth * imageHeight);
    return [UIColor colorWithRed:f * red  green:f * green blue:f * blue alpha:1].CGColor;

}

最佳答案

你永远不会释放rawImageRef

我会在释放数据后立即调用CGImageRelease(rawImageRef);

关于ios - 释放CGImageRef以避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372977/

相关文章:

iOS 11。KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED 是什么意思?

java - 不同语言的内存管理是否足够相似以转移我的知识?

ios - 谷歌地图中的标记图像闪烁

javascript - 进程 Node 不断增长直到耗尽所有内存

android - 在 android 中,当方向改变时,背景图像不会改变

asp.net-mvc-3 - MVC3 中的内存增加

ios - UITableView 动态单元格高度在转换或旋转时中断

ios - 有没有办法验证电子邮件地址是否是有效的 Paypal 电子邮件

android - 适用于平板电脑的 html5 应用程序 : possible to load images from device's filesystem?

ios - 返回自定义对象而不是字符串的数组枚举