我有一款遊戲,運行速度爲60fps,在各方面或多或少都有效,但問題在於當我進入背景時。有兩種方式Im做停頓,這第一種方法運行,當你觸摸在遊戲暫停按鈕:我的後臺應用程序使用70Mb,如何釋放內存?
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches)
{
CGPoint location3 = [touch locationInNode:self.pauseLayer];
SKSpriteNode *touchedNode3 = (SKSpriteNode *)[self.pauseLayer nodeAtPoint:location3];
if (touchedNode3.physicsBody.categoryBitMask == pausa)
{
if (_gameIsPaused == NO)
{
[self.world setPaused:YES];
[self.backWorld setPaused:YES];
[self setPaused:YES];
_gameIsPaused = YES;
[self.pauseLayer setPaused:NO];
[self showPauseMenu];
}
else
{
[self.world setPaused:NO];
[self.backWorld setPaused:NO];
[self setPaused:NO];
_gameIsPaused = NO;
[self hidePauseMenu];
[self.pauseLayer setPaused:YES];
}
而當你進入後臺我有這個在我的應用程序委託:
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
[[AVAudioSession sharedInstance] setActive:NO error:nil];
SKView* view = [self getSKViewSubview];
if (view) {
view.paused = YES;
}
}
問題是在後臺運行時,我的應用程序仍在使用內存,有時當我打開另一個應用程序時,我的遊戲崩潰。在此圖像中,你可以看到我的應用程序的運行功耗,而背景:
我的問題是,如果有一種方法防止碰撞,我將釋放內存手動做離開比賽前的任務? 我嘗試了兩種方式進入背景,啓用了暫停菜單並禁用了暫停菜單。有時它會崩潰,看起來像是隨機的。因此內存消耗總是相同的。除了點數,球員位置,時間,現在的世界等等重要的東西之外,最好的做法是釋放所有東西,並且摧毀其他所有東西?在這種情況下,我該怎麼做?摧毀一切,並保持得分,積分等?
最好的辦法是重現和分析應用程序在後臺分別從中恢復時發生的崩潰。你不需要擔心你的應用程序後臺內存使用情況,但iOS會照顧到這一點。我相信它甚至可能需要一個內存快照並將其存儲在磁盤上供以後恢復,而不是將內容保存在「真實」內存中。另外,如果你發現背景模式是一個問題,你可以簡單地關閉你的應用程序的背景模式。 – LearnCocos2D 2014-10-28 10:53:56