カスタム シェイプを使用してスプライト キットの物理ボディを作成すると、奇妙なメモリ リークが発生します。これは私の実装がどのように見えるかです:
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 はいくつかのメモリ リークについて教えてくれます。
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
。代わりにこの実装を使用している場合 (テスト目的):
CGFloat radius = MAX(self.frame.size.width, self.frame.size.height) * 0.5f;
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:radius];
...すべてが正常に機能しており、メモリ リークは発生していません。これは Sprite Kit のバグなのか、何か間違っているのだろうか。