UITableView中的數據源對象提前釋放

請看如下代碼:其中_dataSource爲NSArray的實例對象

wKioL1TBs9qgLbk_AABYmWai9fc401.jpg

wKiom1TBswLy9JAUAAClQCPmtWY610.jpg

運行之後,滑動tableview,會直接crash,崩潰現象如下:

wKioL1TBtCKzrrsuAACYaBAa-Ww086.jpg


沒有任何崩潰信息;

解決方案:

第1步:程序在cell.textLabel.text = _dataSource[indexPath.row]處crash,但控制檯沒有任何的reason;我們可以通過命令行或則Print的形式查看對應對象是否存在問題;

第2步:我們這次採用命令行模式的形式,先用po打印看一下當前這句話涉及到的對象,分別是什麼?如下圖:

wKiom1TBtTDR8d5JAABu_lxIFWs371.jpg

第3步:通過控制檯,我們法線打印輸出數據源中的某個元素的時候,出現了問題,reason:The process has been returned to the state before expression evaluation.,那麼,我們得思考一下該對象是否涉及到內存提前釋放的情況了;

第4步:現在,我們打開查看內存檢測選項:

如下圖,選擇 Edit Scheme -> run -> Diagnostics, 選中 Objective -c Enable Zombie Objects, 最後Close

wKioL1TBtxyAzEF3AAEFmTi3kLE538.jpg

再次運行程序,滑動tableview,此時控制檯會打印輸出如下提示:

wKioL1TBt1jinwKXAAC16uwxd00636.jpg

那麼,說明我們的_dataSource對象優內存問題;

第5步:回頭檢查我們的_dataSource,爲NSArray對象,創建方式位便利構造器初始化方式,所以,我們需要修改一下:

注意:不要忘記在dealloc中進行釋放,當前爲手動管理內存模式下

wKioL1TBt93Tuh5rAAA9bMAPJ1Q097.jpg


再次運行,滑動tableview,一切正常,搞定



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章