2010-02-25 109 views
2

我有一個視圖控制器,它調用performSelector:withObject:afterDelay。但是,如果我在調用此方法後立即刪除了該視圖控制器,則系統嘗試在該(已刪除的)視圖控制器上執行延遲選擇器時,該應用會崩潰。如何解決這個performSelector:withObject:afterDelay:問題?

現在我該怎麼辦?我需要擺脫視圖控制器來節省內存,所以沒有辦法讓它掛在身邊。

任何方式來取消延遲執行選擇器之前執行?

回答

3

我建議改用NSTimer。您可以簡單地使用invalidate計時器,以確保在UIViewController消失後永遠不會調用該計時器。 invalidate定時器的好時刻例如在viewWillDisappear:

這確實意味着計時器是由視圖控制器擁有。但無論如何,這是一個很好的設計。

1

對於已刪除的對象,您無法執行選擇器,您可能需要將對象置於其周圍,或者使用其他可以掛起的較小對象進行工作。

要取消,有一個cancelPreviousPerformRequestsWithTarget:selector:object:cancelPreviousPerformRequestsWithTarget:方法。

+0

您可以通過執行類似'[someObject performSelector:@selector(foo :) withObject:someObject afterDelay:1.0]''來執行對即將被刪除的對象的選擇器。在這種情況下,'someObject'將在該選擇器的執行周圍被保留和釋放。 – 2010-02-25 20:23:39

+0

正確,但在這種情況下,對象不會被刪除,它即將被刪除。 – Bearddo 2010-02-25 21:02:32