2012-09-17 63 views
0
  • 將屬性設置爲nilviewDidUnload在兩個方面(即使用ARC還是沒有ARC)都有什麼意義?
  • 只有在IBOulets的情況下才有意義嗎?我們不需要將其他屬性(不是IBOulets)設置爲nil
  • 如果我不這樣做會導致什麼後果?我之前沒有設置它們,並且沒有觀察到任何後果。

幫助真的很感激。重要性/需要將屬性設置爲無視圖DUnUnload

+1

iOS 6仍然處於NDA之下,所以我們不能直接討論它。但我建議在iOS 6發行說明中搜索「viewDidUnload」。 https://developer.apple.com/library/prerelease/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html(我知道這個問題不是關於iOS 6的,但這會告訴你蘋果的建議該方法。) –

回答

1

設置IBOutlets在viewDidUnload零告訴編譯器釋放內存警告..viewDidUnload和didReceiveMemoryWarning的viewcontrollers的內存warning.because網點得到called..Normally在ViewDidUnload的IBOutlets設置爲零,並在didReceiveMemoryWarning性質或對象被釋放。因此,在這種情況下,內存被重新獲得,因此你的應用程序可以繼續工作,否則由於內存不足導致崩潰時連續池化導致原因崩潰

+0

你的意思是它沒有任何處理ARC? – harshitgupta

+0

如果您已經將IBOutlet的屬性聲明爲retain或(在ARC中爲strong),那麼您需要在viewDidUnload.But中釋放它。如果分配給IBOutlet的屬性被賦值或(在ARC中爲弱),則不需要設置零售商零 – AppleDelegate

0

在閱讀了很多關於web上的文章並且經歷了類似的關於stackoverflow我達成了以下諒解:

  • viewDidUnload在低內存情況下由編譯器調用。

  • 我們應該在方法中將這些屬性設置爲零,這些屬性將在viewDidLoad中重新實例化。幾乎所有IBOutlet組件都屬於該類別。所以我們更好地宣佈IBOutlet在該方法中爲零。不這樣做會導致持續池化,並可能由於未來內存不足而導致崩潰(應用程序繼續運行)。

  • 我也讀過,我們不應該像NSString那樣沒有類的實例(可能會導致崩潰),這與我的經驗是一致的。但是我不知道的原因。

  • 它與ARC沒有任何關係。將屬性設置爲零就意味着該屬性不再保留任何內存位置的引用。

每當我瞭解到更多的東西時,我都會繼續更新這個答案。

謝謝。