2011-04-26 185 views
1

這讓我瘋狂。
我的印象是,awakeFromNib方法只被調用一次(即使再次訪問該視圖時),糾正我,如果我錯了。awakeFromNib多次呼叫

我有一個3意見的應用程序。 最後一個是我使用drawRect繪製的UIview的子類。

我在最後一個視圖中有一個使用awakeFromNib方法的工作代碼,只有一次我訪問該視圖的方法被調用一次。
現在我部署的應用到我的設備和更新我的Xcode到版本4

當我再次和調試運行代碼,方法awakeFromNib被稱爲每次視圖被訪問。
我不認爲更新會做這樣一個瘋狂的事情,但我完全困惑。

是否有某種內存泄漏或我缺少什麼?

謝謝

回答

3

我的印象是awakeFromNib方法被調用一次(甚至當視圖再次訪問)下,糾正我,如果我錯了。

每當從nib文件加載該類的實例時,就會在類的每個實例上調用-awakeFromNib。你應該能夠期望它只在特定的實例上被調用一次,但是應該在任何給定的類的不同實例上多次調用它。

UIViewControllers會在它們收到內存警告並且它們的視圖不可見時卸載它們的視圖。視圖將在下次調用視圖控制器的'視圖'屬性時重新加載。您應該瞭解並支持此行爲,以最大限度地減少應用程序的內存使用量,因爲它允許您在任何給定時間只保留內存中當前可見的視圖。

這聽起來像你不期望控制器的視圖從你的筆尖卸載和重新加載。

+0

我在我的一本iOS開發書籍中讀到,在iOS中,由於內存限制,awakeFromNib可以並且通常會被調用多次。針對OSX進行開發會給您更多的自由:您通常可以期望它只會被稱爲單一時間,因爲您有更多的內存可供使用。 – 2011-04-26 21:24:27

+0

這也沒有定義一般的「低內存」機制,你需要隨意卸載筆尖。 – 2011-04-26 21:30:15

+0

@Johan:謝謝...我有相同的代碼,這將調用awakeFromNib一次...現在它的工作方式不同...我甚至有2個應用程序在我的手機上使用相同的代碼,工作方式不同..有沒有辦法我可以只喚醒一次awakeFromNib? – R3D3vil 2011-04-27 13:07:03