2012-11-12 162 views
0

我正在使用viewWidAppear,viewDidAppear,viewWillDisappear,viewDidDisappear UIViewController。
我使用UINavigationController來導航視圖控制器。在iPhone中,是否保證viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear總是被調用?

例如,創建的NSTimer或寄存器中viewWillAppear中或viewDidAppear通知。我使計時器無效或在viewWillDisappear或viewDidDisappear中刪除通知。

但是,如果這4種方法(viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear)沒有被調用,程序將崩潰或保留循環會發生。

我無法找到的文件說,這是保證viewWillAppear中,viewDidAppear,viewWillDisappear,viewDidDisappear總是調用。

到目前爲止,他們似乎總是叫我的程序工作如我所料。

但是否有案件的4種方法不叫?
或者是有可能的4種方法通常被稱爲,但有時不被隨機調用,沒有理由?

回答

2

是的,他們總是叫。如果您繼承了其中一個視圖控制器,請確保調用超類實現。

+0

謝謝大家!聽到這個消息,我感到寬慰。 –

+0

我注意到該viewWillDisappear:和viewDidDisappear:收到電話時未被調用。 –

+0

嗯,這很有趣@MurraySagal。我從未測試過這種情況。我不再進行iOS開發,所以我無法訪問設備來測試它。 –

1

我覺得你可以信任這些方法,仍然,viewDidLoaddealloc對我而言從未失敗過。

你可以註冊並刪除有通知。 但是,我不知道所有的應用規範,我推薦的可能不可行。

3

我可以說比viewWillAppear中和viewDidAppear方法總是叫你的看法。 viewWillDisappear和viewDidDisappear方法在您使用另一個視圖更改視圖或關閉它時調用。例如,如果您有一些滾動視圖,則不會調用這些方法。

1

是在觀看賽事總是火,但是覆蓋您必須聲明它們的行爲。

根據蘋果文檔viewDidUnload已被棄用。

看看這個鏈接,蘋果官方類引用的UIViewController

UIViewController Reference

它指出:

UIViewController類提供當這些事件發生時調用特定的方法。子類可以重寫這些方法來實現特定的行爲。

+0

錯了...'[超級的dealloc]'不應該叫' - (無效)dealloc'可以覆蓋。 – Peres

+0

你是對的,換了.... – geekonedge

0

除了錯誤時的一些方法可能不被調用和/或調用兩次(例如一次性解散/彈出多個控制器),使用iOS 7時,如果啓動輕掃手勢,部分顯示導航堆棧中的前一個控制器,然後取消輕掃即可,以避免發生彈出,你會發現並非所有的方法都在兩個控制器上被調用。

相關問題