修改
显然它似乎是sprite kit / box2d中的一个错误:SKPhysicsBody bodyWithPolygonFromPath memory leaks
我太天真地认为苹果不会泄漏:D
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY);
CGPathAddLineToPoint(path, NULL, 69 * scale - offsetX, 52 * scale - offsetY);
CGPathAddLineToPoint(path, NULL, 80 * scale - offsetX, 14 * scale - offsetY);
CGPathAddLineToPoint(path, NULL, 45 * scale - offsetX, 2 *scale - offsetY);
CGPathAddLineToPoint(path, NULL, 1 * scale - offsetX, 16 *scale- offsetY);
CGPathCloseSubpath(path);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
CGPathRelease(path);
我错过了什么吗?我释放了这个对象,但是有关内存泄漏的投诉......
75%
CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY);
25%
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
答案 0 :(得分:0)
Apple docs声明:“减少图形路径的保留计数”。是否释放路径是基于当前保留计数。如果其他东西保留了路径,那么它将不会被释放。还有什么可以保留这条道路,怎么样:
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
如果您需要查看对象使用仪器的保留,释放和自动释放的位置:
在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。
答案 1 :(得分:0)
几乎可以肯定你是在泄漏SKPhysicsBody
或self
,但也有可能你在其他地方提取路径并过度保留它。仪器只跟踪事物的分配时间。它无法检测到你在发布内容时犯了错误。因此,如果泄漏整个physicsBody
,它将显示为“在代码的这个区域中分配的内存。”