2014-10-28 78 views
0

我有一款遊戲,運行速度爲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; 
    } 

}

問題是在後臺運行時,我的應用程序仍在使用內存,有時當我打開另一個應用程序時,我的遊戲崩潰。在此圖像中,你可以看到我的應用程序的運行功耗,而背景: enter image description here

我的問題是,如果有一種方法防止碰撞,我將釋放內存手動做離開比賽前的任務? 我嘗試了兩種方式進入背景,啓用了暫停菜單並禁用了暫停菜單。有時它會崩潰,看起來像是隨機的。因此內存消耗總是相同的。除了點數,球員位置,時間,現在的世界等等重要的東西之外,最好的做法是釋放所有東西,並且摧毀其他所有東西?在這種情況下,我該怎麼做?摧毀一切,並保持得分,積分等?

+0

最好的辦法是重現和分析應用程序在後臺分別從中恢復時發生的崩潰。你不需要擔心你的應用程序後臺內存使用情況,但iOS會照顧到這一點。我相信它甚至可能需要一個內存快照並將其存儲在磁盤上供以後恢復,而不是將內容保存在「真實」內存中。另外,如果你發現背景模式是一個問題,你可以簡單地關閉你的應用程序的背景模式。 – LearnCocos2D 2014-10-28 10:53:56

回答

1

iOS在需要更多內存時會殺死後臺應用程序,而不會對應用程序發出任何警告。應用程序在進入後臺時保存它的狀態以防系統殺死它,然後在啓動時再次恢復狀態。

如果系統決定殺死你的應用程序時仍然在Xcode中調試,如果我沒有記錯,它會顯示爲SIGKILL,但這不是崩潰,iOS只是在沒有警告的情況下終止你的應用程序。

在後臺降低內存使用量的唯一方法是在應用程序進入後臺時卸載圖像等,但對於在用戶切換應用程序時可能導致惱人加載/凍結的遊戲...通常,所有應用程序當收到低內存警告時,需要做的是釋放任何不必要的或可重新加載的資源(緩存圖像等)...

0

這是我接近SIGKILL的最接近的東西,它發生在我打開另一個遊戲時3D像行屍走肉。只適用於大型應用程序,不適用於whats'app或safari,並且不會恢復任何狀態。

enter image description here

我得到這個試圖重現崩潰上傳的圖像。

相關問題