簡體   English   中英

我不知道為什么這個表視圖代碼崩潰了

[英]i don't know why this table view code crashes

你好,我正在學習iOS編程

我創建了一個項目,這是一個空的應用程序

我創建了沒有xib文件的表視圖控制器。

我在didFinishLaunchingWithOptions中插入了以下代碼

TableViewController *tvc = [[TableViewController alloc] init];
[self.window addSubView:tvc.view];
[tvc release];

當我向下滾動時,這段代碼崩潰了。 這是為什么?

當我評論這段代碼

[tvc release];

程序不會崩潰。

我沒有在AppDelegate文件中寫dealloc。

這是為什么??

我想我用alloc創建了表視圖控制器

所以保留計數是1。

並向窗口和表視圖控制器添加子視圖保留計數為2。

所以我發布表視圖控制器

但是當我向下滾動時它崩潰了。

我不知道為什么..

請幫幫我

很簡單,添加tvc.view作為窗口的子視圖會導致tvc.view保留但不保留tvc本身。 實質上,只要在其上調用release ,您的TableViewController實例就會變為無效。 大概是因為TableViewController實例被配置為UITableViewUIScrollView的委托或數據源或與tvc.view相關的任何其他東西,應用程序崩潰。

另請注意,顯示視圖的方式不是推薦的方法。 你真的應該調用presentModalViewController:pushViewController:並傳遞TableViewController實例。 這將導致TableViewController被保留,直到它被解除/彈出,使您可以安全地調用release如示例代碼中所示。

或者,由於您作為didFinishLaunchingWithOptions一部分手動進行此設置,您也可以直接設置window.rootViewController ,盡管不是真的不推薦。 XCode允許您指定應用程序的默認/根視圖控制器,並在應用程序啟動時自動為您設置。

實際上你剛剛添加了視圖。 因此,僅保留觀點。 viewcontroller將被釋放。 但是viewcontroller需要是tableview的數據源和委托。 由於它已被解除分配,該數據源將沒有任何有效的引用,因此它崩潰。

暫無
暫無

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

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