使用
Xcode附带的sprite kit模板,我修改场景如下:
#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,10); for(int i = 2; i<self.frame.size.width; i+=2) { CGPathAddLineToPoint(path,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
该应用程序似乎继续使用更多内存,直到它挂起或崩溃(达到约180MB后).使用泄漏和分配工具,我发现了以下内容:
泄漏:
分配:
从图像中可以看出,存在大量使用内存的Malloc调用.我不直接调用Malloc – 似乎这些调用是由SpriteKit完成的.同样,存在许多内存泄漏,这似乎也是由于SKShapeNode,SKNode或其他Sprite Kit对象造成的.
我如何解决或解决此内存(泄漏)问题?我必须每帧创建SKShapeNodes和SKNodes.这段代码只是用来说明问题的一个例子 – 我的实际项目使用动态生成的路径要复杂得多(不像本例中那样是静态的).