0

我剛剛將我的應用程序升級到ARC,但我在處理與委託的類時遇到了問題。因爲我的目標是iOS 4.0及更高版本,所以我使用__unsafe_unretained@property (unsafe_unretained)來存儲委託指針。自升級到ARC後委託指針問題

但是,我現在發現的是,我在我的視圖控制器中創建的服務(包括委託)現在在我已經移除視圖控制器後掛起,導致嘗試與視圖控制器進行通信委託)後,它已被釋放...因此啓用殭屍得到一個錯誤。

如何在視圖控制器或服務中更新我的代碼,以便當視圖控制器被刪除(彈出導航控制器堆棧)時,具有委託指針的服務也會從內存中刪除?

回答

0

事實證明,這不是我說的做錯了什麼......

違規的NSZombie竟然是由於MKMapViewDelegate,這使發送「的MapView:didUpdateUserLocation:」視圖控制器後,它屬於被取消分配。我知道。

我解決它通過攔截在我的視圖控制器的後退按鈕,並設置委託給無彈出之前:

- (void)backButtonTapped 
{ 
    self.mapView.delegate = nil; 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

我不知道爲什麼MapKit持有到委託後,它一直的dealloc倒是。如果有人知道我會很感激發現更多。