如何清除CGBitMapContext而不会导致内存泄漏?

时间:2014-05-04 13:14:33

标签: ios objective-c ios7 core-graphics

我有一个CGBitmap上下文,其中保存了在屏幕上绘制的所有内容。当我按下一个名为reset的按钮时,我希望删除UIView中绘制的所有内容。如果将cacheBitmap和cache context都设置为nil,它将清除视图,但是由于我没有释放它们,因此会导致内存泄漏。但是,调用free和CFRelease会导致内存泄漏消失,但视图不会被清除。有没有办法在防止内存泄漏问题的同时清除视图?

  // init method
    cacheBitmap = malloc( bitmapByteCount );
    if (cacheBitmap == NULL){
        return NO;
    }

    CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little;
    colorSpace = CGColorSpaceCreateDeviceRGB();

    cacheContext = CGBitmapContextCreate (cacheBitmap, size.width*scaleFactor, size.height *scaleFactor, 8, bitmapBytesPerRow, colorSpace, bitmapInfo);

       CGContextScaleCTM(cacheContext, scaleFactor, scaleFactor);


  CGContextSetRGBFillColor(cacheContext, 0, 0, 0, 0.0);
   CGContextFillRect(cacheContext, (CGRect){CGPointZero, CGSizeMake(size.height*scaleFactor, size.width*scaleFactor)});

    return YES;
}

-(void)clear{

    cacheContext = nil;
    cacheBitmap = nil;
    CGContextRelease(cacheContext);
    free(cacheBitmap);
    CGColorSpaceRelease(colorSpace);


    [self initContext:framsize];
    [self setNeedsDisplay];

}

1 个答案:

答案 0 :(得分:1)