[英]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
實例被配置為UITableView
或UIScrollView
的委托或數據源或與tvc.view
相關的任何其他東西,應用程序崩潰。
另請注意,顯示視圖的方式不是推薦的方法。 你真的應該調用presentModalViewController:
或pushViewController:
並傳遞TableViewController
實例。 這將導致TableViewController
被保留,直到它被解除/彈出,使您可以安全地調用release
如示例代碼中所示。
或者,由於您作為didFinishLaunchingWithOptions
一部分手動進行此設置,您也可以直接設置window.rootViewController
,盡管不是真的不推薦。 XCode允許您指定應用程序的默認/根視圖控制器,並在應用程序啟動時自動為您設置。
實際上你剛剛添加了視圖。 因此,僅保留觀點。 viewcontroller將被釋放。 但是viewcontroller需要是tableview的數據源和委托。 由於它已被解除分配,該數據源將沒有任何有效的引用,因此它崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.