NSData永远不会被释放

时间:2015-04-08 19:09:17

标签: ios memory-leaks automatic-ref-counting

我有这个代码将填充了RGB数据的NSData对象转换为填充了RGBA数据的NSData对象,然后将其转换为图像并显示。不幸的是,仪器显示我的记忆稳步攀升,而且我的rgbaData对象在下面的代码中永远不会消失。

- (NSData *)uint8RGBADataOfSize:(NSUInteger)size fromRGBData:(NSData *)rgbData
{
    NSMutableData *rgbaData = [[NSMutableData alloc] initWithLength:(size * 4  * sizeof(uint8_t))];
    uint8_t *rgba = rgbaData.mutableBytes;
    const uint8_t *rgb = rgbData.bytes;

    for(int i = 0; i < size; ++i)
    {
        rgba[4*i+0] = rgb[3*i];
        rgba[4*i+1] = rgb[3*i+1];
        rgba[4*i+2] = rgb[3*i+2];
        rgba[4*i+3] = 255;
    }

    return rgbaData;
}

我这样调用上面的方法:

data = [self uint8RGBADataOfSize:(width * height) fromRGBData:data];

数据是带有rgb数据的原始NSData,我只是用新创建的rgba NSData替换它,然后再创建一个图像:

CGDataProviderRef provider = CGDataProviderCreateWithData(nil, data.bytes, totalBytes, nil);
CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider, nil, NO, kCGRenderingIntentDefault);

在创建上述提供程序后,我的新数据未被使用,并且在我将UIImage传回后,我的方法很快就存在了。这里的一切对我来说都很好,但我最终得到了来自我的uint8RGBADataOfSize:fromRGBData:方法的不断增加的Malloc 84.00 KB。在这一点上,我很难过,任何人都有任何想法?

0 个答案:

没有答案