Используя шаблон набора спрайтов, который поставляется с Xcode, я изменить сцену, чтобы быть следующим:Почему создание и удаление SKShapeNode и SKNode неоднократно вызывают утечку памяти?
#import "MyScene.h"
@interface MyScene()
@property (nonatomic,strong)SKNode *floor;
@end
@implementation MyScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
}
return self;
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
[self removeAllChildren];
self.floor = nil;
self.floor = [SKNode node];
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 0, 10);
for(int i = 2; i<self.frame.size.width; i+=2)
{
CGPathAddLineToPoint(path, nil, i, 10);
}
self.floor.physicsBody = [SKPhysicsBody bodyWithEdgeChainFromPath:path];
SKShapeNode *shape = [SKShapeNode node];
shape.path = path;
shape.strokeColor = [UIColor redColor];
[self.floor addChild:shape];
[self addChild:self.floor];
CGPathRelease(path);
}
@end
приложение, кажется, продолжать использовать больше памяти, пока она либо зависает, либо вылетает (после достижения около 180 Мб). Использование утечек и распределения инструментов, я нашел следующий:
Утечки: Отчисления:
Как видно из изображений, существует большое количество таНоса вызовов с использованием памяти. Я не называю Malloc напрямую - кажется, эти вызовы сделаны SpriteKit. Аналогичным образом, существует ряд утечек памяти, которые также, по-видимому, связаны с SKShapeNode, SKNode или другими объектами Sprite Kit.
Как мне решить проблему или решить эту проблему? Мне нужно создать SKShapeNodes и SKNodes каждый кадр. Этот код является просто образцом для иллюстрации проблемы - мой фактический проект намного сложнее с динамически создаваемыми путями (не статичными, как в этом примере).
CFPathRelease означает, что вы не используете ARC, правильно? – LearnCocos2D
Нет. Я использую ARC. - Это проект Sprite Kit. –
CGMutablePathRef использует C API, поэтому вы несете ответственность за его выпуск. Если вы не вызываете CGMutablePathRelease, вы будете утечка памяти, и «Анализ» предупредит вас. –