2012-08-28 22 views
1

我有一個與Cocos2D和一些UIKit混合在一起的應用程序。我最近一直在實現一些新功能,所以也許內存管理是錯誤的或者是有些過度發佈,但是當我通過單擊主頁按鈕退出應用程序時,控制檯只是與消息(lldb)一起崩潰。即使我打開NSZombiesEnabled也沒有什麼不同。應用程序僅與(lldb)崩潰?

的唯一的事我的應用點是一條線,看起來像這樣:

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient: 
0x38101094: trap 
0x38101096: nop 

我不知道那是什麼意思,但我很樂意此問題得到解決。有誰知道爲什麼會發生這種情況?

在此先感謝!

編輯:我認爲這種情況的原因是因爲我呼籲暫停上的Cocos2D的CCDirector後我做unscheduleAllSelectors和stopAnimation。如果我不打電話給那兩個,那麼就不會有死機。

回答

0

這可能意味着你仍然試圖渲染OpenGL中的東西(通過Cocos2D),這是在應用程序處於後臺時不允許的。

+0

然後我恢復applicationDidBecomeActive中的OpenGL項目吧?目前,雖然我在applicationDidEnterBackground或applicationWillEnterForeground中沒有任何內容,但它仍然與(lldb)一起崩潰。 –

2

你的應用程序正在被殺,因爲它違反了例外。幾乎可以肯定的是,當您的應用程序轉移到後臺後,您正在使用GPU,這是非法的,並會導致系統向您的應用程序發送終止信號。

當一個應用程序在調試器中運行並且它被外部信號(比如kill信號)殺死而不是調試器可以處理的東西(比如mach例外)時,調試器只會給你任何它知道的信息並在程序入口點陷阱(這通常導致調試器看起來像它在main()停在最後一行。

要注意的重要的事情,然而,就是你必須之前結束的任何及所有GPU活動你的應用程序進入後臺,一個好的地方是在UIApplicationWillResignActiveNotification的通知處理程序或類似命名的應用程序代理回調。

+0

然後我恢復applicationDidBecomeActive的OpenGL項目?目前,雖然我在applicationDidEnterBackground或applicationWillEnterForeground中沒有任何內容,但它仍然與(lldb)一起崩潰。 –

+0

@iBradApps是的,你需要暫停辭職活動,恢復活躍。您肯定會訪問GPU(或者Cocos2D代表您正在執行的任務仍在訪問GPU)。在從通知處理程序或委託方法返回之前,您需要確保所有訪問都已完全停止。 –

+0

好的,謝謝! –