我有一个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];
}
答案 0 :(得分:1)
一旦完成上下文工作,就应该尝试致电UIGraphicsEndImageContext()
。