iPhone - 多CGBitmapContextCreateImage电话 - 攀ObjectA

2019-08-07 02:39发布

有没有其他人遇到过这个问题吗? 爬上ObjectAlloc中作为CGBitmapContextCreateImage的结果。 难道苹果的软件没有完全释放ObjectAlloc中?

我调整图像大小用的NSTimer第二12次。 在图像的调整,我也喜欢加入由包括interpolationQuality高斯模糊效果的Photoshop。

使用仪器后,它并没有显示出任何内存泄漏,但我只是ObjectAlloc中继续攀升。 它直接指向CGBitmapContextCreateImage。
CGBitmapContextCreateImage> CREATE_ bitmap_ data_provide>的malloc

任何人都知道一个解决方案吗? 甚至有可能想法?

该范围内的NSTimer的呼唤

NSString * fileLocation = [[NSBundle mainBundle] pathForResource:imgMain ofType:@"jpg"];
NSData * imageData = [NSData dataWithContentsOfFile:fileLocation];
UIImage * blurMe = [UIImage imageWithData:imageData];

CGRect rect = CGRectMake(0, 0, round(blurMe.size.width /dblBlurLevel), round(blurMe.size.width /dblBlurLevel)); 
UIImage * imageShrink = [self resizedImage: blurMe : rect : 3.0];   

CGRect rect2 = CGRectMake(0, 0, blurMe.size.width , blurMe.size.width ); 
UIImage * imageReize = [self resizedImage: imageShrink : rect2 : 3.0];

imgView.image = imageReize;

大小功能

-(UIImage *) resizedImage:(UIImage *)inImage : (CGRect)thumbRect : (double)interpolationQuality
{
    CGImageRef                  imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;

    // Build a bitmap context that's the size of the thumbRect
    CGContextRef bitmap = CGBitmapContextCreate(
                                NULL,
                                thumbRect.size.width,
                                thumbRect.size.height,          
                                CGImageGetBitsPerComponent(imageRef),
                                4 * thumbRect.size.width,       
                                CGImageGetColorSpace(imageRef),
                                alphaInfo
                                );

    // Draw into the context, this scales the image
    CGContextSetInterpolationQuality(bitmap, interpolationQuality);
    CGContextDrawImage(bitmap, thumbRect, imageRef);

    // Get an image from the context and a UIImage
    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);   // ok if NULL
    CGImageRelease(ref);

    return [result autorelease];
}

Answer 1:

该代码overreleases result

这就是说,它很可能是问题是UIImage的是没有得到释放,并UIImage的持有到CGImage和CGImage持有到这是CGBitmapContextCreate下分配的内存。

使用的仪器,看是否UIImages没有得到释放,如果是这样尝试调试原因。



Answer 2:

我编译和运行你的代码,你拥有它,我看不出有任何的泄漏也不会我对象的alloc继续攀升。 我运行的代码一对夫妇第二次并没有看到在仪器的任何物体的增长。 我只在模拟器上运行。 我也试过,以防kCGInterpolationNone,而不是3.0,这是问题,仍然没有泄漏。

不知道为什么我没有让他们和你做。 你可能想只是这样做的方法:

-(UIImage *) resizedImage:(UIImage *)inImage : (CGRect)thumbRect : (double)interpolationQuality
{
    CGImageRef                  imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    return inImage;
...

为了使这种方法是没有意义的,然后观察,看是否该对象的alloc继续增长。 如果是这样,那么问题在别处。



文章来源: iPhone - Multiple CGBitmapContextCreateImage Calls - ObjectAlloc climbing