Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 即使调用了CGPathReleased,CGMutablePath也未释放_Objective C - Fatal编程技术网

Objective c 即使调用了CGPathReleased,CGMutablePath也未释放

Objective 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

编辑

很明显,这似乎是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 - 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。