为什么这个Objective C绘图方法泄露了?

时间:2013-09-06 14:34:09

标签: ios6 memory-leaks

任何人都可以告诉我为什么这种常常被称为泄漏记忆的方法?

如果我看看iOS分配工具/ VM工具没有泄漏....但是如果我看一下我在stackoverflow找到的report_memory函数,我可以看到常驻大小正在增长每2秒1 MB。如果我不调用此方法,则驻留大小每40秒仅增加1 MB。有时候我会收到一个“已收到内存警告”的日志,但我无法弄清楚为什么会这样。居民大小,脏大小,分配......一切看起来都不错。

path2是一个类变量。

-(void) drawPath:(float) winkel path:(UIBezierPath *) mpath toPoint:(CGPoint) pt{

    path2 = [UIBezierPath bezierPathWithCGPath:mpath.CGPath];

    box = CGPathGetPathBoundingBox(path2.CGPath);

    CGAffineTransform translate = CGAffineTransformMakeTranslation(-1 * (box.origin.x + (box.size.width / 2)), -1 * (box.origin.y + (box.size.height / 2)));
    [path2 applyTransform:translate];

    CGAffineTransform rotate = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(winkel));
    [path2 applyTransform:rotate];

    translate = CGAffineTransformMakeTranslation((box.origin.x + (box.size.width / 2)), (box.origin.y + (box.size.height / 2)));
    [path2 applyTransform:translate];

    translate = CGAffineTransformMakeTranslation(pt.x-(box.size.width / 2), pt.y-(box.size.height / 2));
    [path2 applyTransform:translate];

    [path2 fill];
}

我认为问题是CGAffineTransformMakeTranslation / applyTransform ...但是我无法弄清楚为什么这种方法会泄漏。

1 个答案:

答案 0 :(得分:1)

必须使用CFRelease显式释放由名称中包含 Make 的函数返回的每个Core Foundation对象。