簡體   English   中英

iOS UITableView隨機崩潰

[英]iOS UITableView random crash

我有一個我找不到清楚的問題,也許您可​​以幫助我...

我有一個基於UINavigationController的iPad項目,其中的大多數(但不是全部)控制器都是UITableViewController的實例,並且一切正常。

除了我的應用程序隨機崩潰之外,所有東西有時都會崩潰,有時是在使用10分鍾之后,有時只是在10秒之后……它永遠不會在同一視圖上崩潰,也不會在同一時間崩潰,從而難以復制。

此外,它僅在設備上發生,我從未在模擬器中發生此崩潰。

調試器對我沒有太大幫助,它說的是: -[UITableView autorelease]:發送到已釋放實例0x8e9800的消息

這是調用堆棧: http : //i.stack.imgur.com/JSCHx.png

任何想法 ? 謝謝(對不起我的英語)

您在代碼中的某個地方過度釋放了UITableView。 您是在其中一個UITableViewController內的UITableView上調用release還是autorelease release 您只應釋放“擁有”的對象。 你自己使用的方法與開頭的對象allocnewcopy ,或retain

請閱讀可可記憶管理指南以獲取更多信息。

有用的鏈接:

http://www.cocoadev.com/index.pl?MemoryManagement

http://www.cocoadev.com/index.pl?RulesOfThumb

在某個時候,您要么釋放一個您不擁有的UITableView實例,要么在retain對它的引用的某個時刻無法retain它(例如,將其存儲在ivar或聲明為assign的屬性中而不是保留)。

我在博客上寫了關於如何調試這樣的事情的文章:

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

基本上,首先嘗試這三件事:

  1. 進行分析並修復您看到的所有內容
  2. 打開僵屍,運行代碼-它將告訴您是否與已分配的對象進行對話
  3. 如果失敗,請嘗試Debug Malloc,但這要困難得多。

很抱歉,重新閱讀所有源代碼后,我在ViewDidUnload中找到了一個ViewController(我有20個左右的ViewController),並在其中發布了一個Outlet。

它隨機崩潰的原因是我不太了解ViewDidUnload的機制,在內存不足且視圖不可見時調用它來釋放視圖(但不是控制器的對象)(例如:NavigationController的First ViewController) ,然后在ViewController再次變得可見時重新加載視圖。

在模擬器中,內存很少成為問題,因此幾乎從未調用過ViewDidUnload ...

問題已解決,謝謝大家的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM