3

我创建了一个 UIView 子类将其用作矩形视图。并且 drawRect 被覆盖如下:

- (void)drawRect:(CGRect)rect {
    CGFloat radius = 2;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextSetLineWidth(context, 1);

    CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius);
    CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius);
    CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius, radius, M_PI, M_PI / 2, 1);
    CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height);
    CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
    CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius);
    CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius, radius, 0.0f, -M_PI / 2, 1);
    CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y);
    CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius, -M_PI / 2, M_PI, 1);

    CGContextDrawPath(context, kCGPathFillStroke);
}

但它使用大量内存。例如,我可以为 VM Tracker 中的每个自定义矩形视图(在 iPad 4 屏幕大小的矩形上)看到 10 MB MyRectangleView(CALayer)。不仅仅是这个对象,我实现的每个 drawRect 都会泄漏并位于内存上,即使我删除并释放它们也是如此。

是什么原因造成的?我的 drawRect 实现有什么问题吗?

4

0 回答 0