我目前看到内存泄漏问题,似乎来自这段代码:
- (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];
}
这真的很慢...... :(我不知道为什么......
每次我在所选视图中绘制时,都会调用它,但每次我需要创建一个图像并在屏幕上显示它。是否有可能以另一种方式做到这一点??
答案 0 :(得分:0)
根据这些信息,我能想象的唯一可能泄漏可能与offScreenBuffer
有关
如果您显示更多代码或仪器跟踪,它可能有助于找到问题。
同样考虑到内存泄漏的“大小”,您可以看到它是否是泄漏的图像或其他内容并且您误读了仪器报告。
答案 1 :(得分:0)
drawRect中的发布代码不应显示任何泄漏,因为图像已正确释放。
答案 2 :(得分:0)
我目前解决了这个问题。这是一个将数据存储器再次保存为定义大小的图像的问题。我需要从头开始创建一个绘图api,花了一些时间,但它比更新无功能版本更好。谢谢大家的合作=)