问题描述
在创建具有自定义形状的Sprite Kit物理实体时,我有一个奇怪的内存泄漏.这是我的实现的样子:
I have a strange memory leaks when creating Sprite Kit physics bodies with custom shapes. This is how my implementation looks:
CGFloat offsetX = self.frame.size.width * self.anchorPoint.x;
CGFloat offsetY = self.frame.size.height * self.anchorPoint.y;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 4 - offsetX, 3 - offsetY);
CGPathAddLineToPoint(path, NULL, 66 - offsetX, 3 - offsetY);
CGPathAddLineToPoint(path, NULL, 35 - offsetX, 57 - offsetY);
CGPathCloseSubpath(path);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
CGPathRelease(path);
SKSpriteNode
方法中的所有操作均在进行.在创建了这样的主体之后,Instruments告诉我一些内存泄漏:
Everything is going on inside SKSpriteNode
method. Instruments tells me about several memory leaks after creating such bodies:
Leaked object:
Malloc 32 Bytes
Size:
32 Bytes
Responsible Library:
PhysicsKit
Responsible Frame:
std::__1::__split_buffer<PKPoint, std::__1::allocator<PKPoint>&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<PKPoint>&)
CGPathRelease(path);
行是必需的-没有它,我会得到更多有关CGPath
的内存泄漏,这是可以理解的.当我改用此实现方式(出于测试目的)时:
The CGPathRelease(path);
line is necessary - without it I'm getting more memory leaks about CGPath
which is understandable. When I'm using this implementation instead (for testing purposes):
CGFloat radius = MAX(self.frame.size.width, self.frame.size.height) * 0.5f;
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:radius];
...一切正常,没有内存泄漏.我想知道这是Sprite Kit错误还是我做错了事.
...everything is working well, without memory leaks. I wonder if this is Sprite Kit bug or I'm doing something wrong.
推荐答案
这是Sprite Kit中的错误.您将需要等待修复.
This is a bug in sprite kit. You will have to wait for a fix.
这篇关于SKPhysicsBody bodyWithPolygonFromPath内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!