SKPhysicsBody bodyWithPolygonFromPath memory leaks

game-physics, memory-leaks, objective-c, skphysicsbody, sprite-kit

Solution

This is a bug in sprite kit. You will have to wait for a fix.

Problem

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); ``` 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>&) ``` 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]; ``` ...everything is working well, without memory leaks. I wonder if this is Sprite Kit bug or I'm doing something wrong.

Original source