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 トラッカー (iPad 4 の画面サイズの四角形) のカスタム四角形ビューごとに 10 MB の MyRectangleView(CALayer) を確認できます。このオブジェクトだけではありません。実装したすべての drawRect は、削除して解放しても、リークしてメモリ上に残ります。

何が原因ですか?drawRect の実装に何か問題がありますか?

4

0 に答える 0