2010-11-13 58 views
0

我並不是全新的iPhone開發者,但是我遇到了一個情況,我不確定我的代碼的最佳設計選擇。如何正確編寫「viewDidLoad」方法

我有一個視圖控制器,異步獲取從互聯網上的圖像,並將其加載到圖像視圖。但是,當應用程序收到內存警告時,imageView將由didReceiveMemoryWarning釋放。如果應用程序在加載圖像時收到內存警告,則在我的代碼嘗試將圖像加載到imageView時,imageView爲零。

viewDidLoad的最佳做法是什麼?我是否應該實例化後面可能需要的任何變量?或者我應該檢查我的代碼中的其他位置的零值?

此外,在viewDidUnload,我應該只是將IBOutlet變量設置爲零?爲什麼是這樣?

謝謝! -Matt

+1

這不是直接回答這個問題,但也許你應該有下載操作取消內存警告以及... – 2010-11-13 05:29:31

回答

1

爲什麼不在圖像加載時按需創建圖像視圖?無需更早創建它。或者,如果你這樣做,那麼只要有代碼重新創建它,如果它已經發布。

在viewdidunload中,您應該釋放您在viewdidload(或加載視圖)中創建的資源。包括任何接口構建器的IBoutlet都會爲您提供幫助。最好將這些變量設置爲零,以確保它們在發佈後不會無意中訪問,或者雙重發布。

1
  1. IBOutlets既可以是實例變量,也可以是屬性。在這兩種情況下,我們都應該在卸載最頂層的視圖時釋放引用。將IBOutlet保留的屬性設置爲nil會自動釋放引用,但例如我們需要釋放它們的變量。我們仍然需要將實例變量設置爲nil,因爲viewDidUnload不是dealloc,所以我們必須遵守託管內存規則,否則我們可能會在實例內部存在無效的引用。

  2. 我不認爲你應該在viewDidLoad中做什麼規則,但是如果你在viewDidUnload中釋放並設置了一些變量爲nil,那麼你不需要在viewDidLoad中再次檢查nil,除非你不要不相信框架。