長方形ビューとして使用する 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 の実装に何か問題がありますか?