Controller 被 pop 後 dealloc 不打印,手動在 viewWillDisappear 置 tableView = nil 後反而觸發 dealloc。
tableView 的 delegate/dataSource 通常設置為 self(Controller),且 tableView 被 view 強引用,形成:
Controller → view → tableView → delegate/dataSource → Controller
若 tableView 未從父視圖移除且未置 nil,引用計數永不歸零,ARC 不會調用 dealloc。
_tableView = nil 切斷了 Controller → tableView 的強引用鏈,引用計數歸零,觸發 dealloc。
tableView.delegate = self 改為 weak 屬性(需自定義 UITableView 子類暴露 weak delegate)。[self.tableView removeFromSuperview]; self.tableView = nil; —— 這是蘋果推薦的清理時機。weakSelf。Instruments 附加進程會改變內存管理時機,且 dealloc 可能在下一個 RunLoop 才執行。以 Memory Graph 為準,若對象已無引用則屬正常釋放。