是drawRect – 泄漏内存

我目前看到内存泄漏问题,似乎来自这段代码:

- (void)drawRect:(CGRect)rect { CGImageRef cgImage = CGBitmapContextCreateImage(offScreenBuffer); UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage]; CGImageRelease(cgImage); [uiImage drawInRect:self.bounds]; [uiImage release]; } 

这个方法是从触摸事件中调用的……

 -(void)drawPoint:(UITouch *)touch { currentLoc = [[PointLocation alloc] init]; currentLoc.location = [touch locationInView:self]; self.previousPoint = self.point; self.point = currentLoc; [self drawToBuffer]; [currentLoc release]; } 

这是缓冲……

 -(void)drawToBuffer { CGFloat color[4] = {R,G,B,A}; if (self.previousPoint != nil) { CGContextSetRGBStrokeColor(offScreenBuffer, color[0],color[1],color[2],color[3]); CGContextBeginPath(offScreenBuffer); CGContextSetLineWidth(offScreenBuffer, lane); CGContextSetLineCap(offScreenBuffer, kCGLineCapRound); CGContextMoveToPoint(offScreenBuffer, previousPoint.location.x, previousPoint.location.y); CGContextAddLineToPoint(offScreenBuffer, point.location.x, point.location.y); CGContextDrawPath(offScreenBuffer, kCGPathStroke); } [self setNeedsDisplay]; } 

这真的很慢…… :(我不知道为什么……

每次我在所选视图中绘制时,都会调用它,但每次我需要创建一个图像并在屏幕上显示它。 是否有可能以另一种方式做到这一点?

drawRect中的已发布代码不应显示任何泄漏,因为图像已正确释放。

鉴于此信息,我可以想象的唯一可能的泄漏可能与offScreenBuffer有关。
如果您显示更多代码或仪器跟踪,它可能有助于找到问题。

同时考虑到内存泄漏的“SIZE”,你可以看到它是否是泄漏的图像或其他东西,你误读了仪器报告。

我目前解决了这个问题。 将数据存储器再次保存到定义大小的图像是一个问题。 我需要从头开始创建一个绘图api,花了一些时间,但它比更新无function版本更好。 谢谢大家的合作=)