Objective c 即使调用了CGPathReleased,CGMutablePath也未释放
编辑 很明显,这似乎是sprite kit/box2d中的一个bug: 我太天真了,认为苹果不会有漏洞:DObjective c 即使调用了CGPathReleased,CGMutablePath也未释放,objective-c,Objective C,编辑 很明显,这似乎是sprite kit/box2d中的一个bug: 我太天真了,认为苹果不会有漏洞:D CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY); CGPathAddLineToPoint(path, NULL, 69 * scale - offsetX, 52 * scale - offset
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);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
25%
CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
Apple docs声明:“减少图形路径的保留计数”。路径是否被释放取决于当前的保留计数。如果其他内容保留该路径,则不会释放该路径。还有什么可以保留这条路呢
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
如果需要查看对象的保留、释放和自动释放发生在何处,请使用工具:
在仪器中运行,在分配中将“记录参考计数”设置为on(必须停止记录才能设置选项)。使问题代码运行,停止录制,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留、发布和自动删除发生的位置
几乎可以肯定,您正在泄漏
SKPhysicsBody
或self
,但也可能是在其他地方提取路径,并过度保留路径。仪器只记录分配物品的时间。它无法检测到您在发布内容时犯了错误。因此,如果泄漏整个physicsBody
,它将显示为“在代码的此区域中分配的内存”。您怎么认为释放路径会将路径引用设置为NULL?Apple文档声明:“减少图形路径的保留计数”。编辑了该问题。你是对的,这没有任何意义。你运行了Xcode分析器吗?是的,不用担心,分析器显然是sprite工具包中的一个bug。