在我的 UIView 中,我有几个 CGPath 存储在 NSArray(availablePaths)中。
在绘制任何内容之前,我创建每个 CGPath 的缩放版本并替换数组中的旧版本。
我使用以下代码在 drawRect 中获得 SIGABRT。
- (void) scaleAllPaths: (CGFloat) scaleFactor
{
CGAffineTransform transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
CFIndex i;
for(i=0;i<[availablePaths count];i++){
id obj = [availablePaths objectAtIndex:i];
CGPathRef oldPath = (CGPathRef)obj;
CGMutablePathRef newPath = CGPathCreateMutable();
CGPathAddPath(newPath, &transform, oldPath);
[availablePaths replaceObjectAtIndex:i withObject:(id) newPath];
CGPathRelease(newPath); // <--- causes SIGABRT in drawRect:
}
}
-(void)drawRect:(CGRect)rect
{
...
for (int i = 0; i < currentPathIndex; i++) {
id obj = [availablePaths objectAtIndex:i];
CGPathRef path = (CGPathRef)obj;
CGContextBeginPath(context);
CGContextAddPath(context, path); // <--- SIGABRT
CGContextDrawPath(context, kCGPathEOFill);
}
...
如果没有 CGPathRelease(newPath) 绘图工作正常,但当然,我得到了内存泄漏。