概述的UITableView - moveRowAtIndexPath導致內存泄漏
- 在iOS的項目,我有一個
UITableView
,我試圖移動UITableView中的一行。 - 在我的模型,數據的順序已經改變,所以我想直觀地展現它在表上,這就是爲什麼我用爲了做到這一點,我創建
UITableView
的方法moveRowAtIndexPath:toIndexPath:
- 的
NSIndexPath
我將傳遞給UITableView方法的實例。
當泄漏accurs
- 當創建使用該方法
indexPathForRow: section:
(如在代碼段示出),然後將其moveRowAtIndexPath: toIndexPath:
它泄漏傳遞給UITableView
的方法的NSIndexPath實例。
注:
- 我使用ARC(自動引用計數)
- 的XCode 4.3.1
- 我所使用的儀器(Xcode的菜單 - 產品>資料),以確定內存泄漏
代碼:(在UITableViewController裏面)
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:newRow inSection:0]; //leaking
[self.tableView beginUpdates];
[self.tableView moveRowAtIndexPath:originalIndexPath toIndexPath:newIndexPath]; //I think this causes the leak
[self.tableView endUpdates];
步驟我試圖
- 呼叫註釋出到方法
moveRowAtIndexPath:originalIndexPath toIndexPath:
,防止內存泄露 我已經手動使用
CFRelease
(不知道這是一個很好的做法在自動參考計數環境中)CFRelease((__ bridg e void *)toIndexPath);
問題:
- 爲什麼會發生這種情況?有沒有解決辦法?
- 儀器的內存泄漏結果是否準確?
- UITableView的方法
moveRowAtIndexPath:originalIndexPath toIndexPath:
有錯誤嗎? - CFRelease是一個選項嗎?如果CFRelease嘗試釋放已釋放的內存(請參閱上面的確切代碼),是否有安全的方法來防止應用程序崩潰。
我不知道,如果儀器會顯示內存泄漏如果該對象已這是爲什麼這是一個評論,而不是一個答案。你有沒有嘗試在更新後運行[[NSGarbageCollector defaultInstance] collectExhaustively]? – 2012-03-20 02:21:58
感謝您的回覆,我正在做一個iOS項目,所以我無法嘗試垃圾收集。糾正我,如果我錯了 – user1046037 2012-03-20 04:56:43