一般出現這種問題多半是內存問題,也是最噁心的問題(尤其代碼超多的時候)。怎樣解決這些問題呢?
添加MallocStackLoggingNoCompact,NSZombieEnabled,MallocStackLogging三個變量並且值全爲YES
當出現message sent to deallocated instance的時候,是的,是某個對象release了兩次,但是到底是哪個呢?
Xcode->product->Scheme->edit Scheme,在Diagnostics選項卡,選中:Zombie Objects、Distributed Objects、Malloc Stack
運行(模擬器中),找到之前蹦了的地方,看到打印出:
message sent to deallocated instance 0x7f81edad1180
打開“活動監視器”,找到與項目對應的PID:5167
打開終端,pid和之前出問題的內存地址,用命令顯示到終端上
sudo malloc_history 5167 0x7f81edad1180
找到錯誤之前最後一個方法,結合打出內存地址,可得到錯誤地點。
這裏我的錯誤是:
點擊collctionview 進入DomesticDetailViewController,滑動DomesticDetailViewController裏的scrollerview到最下面,後pop,導致scrollView滾動還沒結束就釋放了delegate出現錯誤
解決這個問題的方法是:
釋放這個頁面的時候就將delegate釋放掉
-(void)dealloc
{
self.scrollView.delegate =nil;
}