使用CGMutablePathRef的缺点?

我有这个代码来绘制圆angular的矩形:

void ContextAddRoundedRect(CGContextRef ctx, CGRect rect, CGFloat radius) { CGFloat minX = CGRectGetMinX(rect); CGFloat maxX = CGRectGetMaxX(rect); CGFloat minY = CGRectGetMinY(rect); CGFloat maxY = CGRectGetMaxY(rect); CGContextMoveToPoint(ctx, minX + radius, minY); CGContextAddArcToPoint(ctx, maxX, minY, maxX, minY + radius, radius); CGContextAddArcToPoint(ctx, maxX, maxY, maxX - radius, maxY, radius); CGContextAddArcToPoint(ctx, minX, maxY, minX, maxY - radius, radius); CGContextAddArcToPoint(ctx, minX, minY, minX + radius, minY, radius); } 

我将它转换为使用CGMutablePathRef的绘图,因为那么我可以使用-[UIBezierPath containsPoint:] (通过使用+bezierPathWithCGPath:首先,如在评论和答案在这里指定。

使用CGMutablePathRef是否存在严重/已知的缺点,而不是直接在CGContext上进行绘图? 我的猜测是,这是一个不起动,但也许有一些我错过了。

(我知道我必须释放它)

似乎是一个好方法给我…也许你甚至可以caching它以某种方式? *我的意思是不要每次重做path,只有当直angular或半径改变时

当然一条可变path会有更高的内存占用,但在这种情况下应该是可以忽略的


例如:

 UIBezierPath *pathWithRoundedRect(NSRect rect, CGFloat radius) { CGMutablePathRef path; ... id p = [UIBezierPath bezierPathWithCGPath:path]; CGPathRelease(path); return p; 

}

只需使用+[UIBezierPath bezierPathWithRoundedRect:cornerRadius:]并节省自己的所有麻烦。 如果你确实需要一个CGPathRef ,那么得到CGPath属性。

除非你每秒钟做数千次,否则不太可能明显变慢或占用大量的内存。

不, CGContext有一个内部path,在CGContext上绘制的函数只是调用其内部CGMutablePath的等价函数。 没有理由不自己做CGMutablePath, CGContext上的path函数是一个方便。

如果你不打算使用CGContext绘制path,那么你最好做一个CGMutablePath