如果我對視圖層次結構中的視圖有強烈的引用,是否必須將它設置爲viewDidUnload中的nil,還是由ARC處理?ARC和viewDidUnload
3
A
回答
6
前兩個答案中有太多的錯誤信息,我將準確地澄清情況。請注意,這些是相對於部署目標,而不是你是否使用iOS6的SDK構建):
你不用擔心self.view - 在的UIViewController管理着
頂級對象 - 即那些沒有包含在另一個對象 - 一定要堅強
其他對象應使用弱(系統零的他們被釋放防止崩潰試圖使用一個釋放的對象時,伊娃)
用於在iOS6之前的設備上進行部署,使用viewDidUnload釋放頂層對象和其他任何您想要的內容。注意:dealloc不會在此之後調用 - 下一條消息很可能是viewDidLoad,當內存問題導致消息消失且視圖重新出現時)
對於iOS6和更高版本,請勿使用viewDidUnload請參閱下面的編輯),如果您想釋放與視圖或其他UI對象無關的內存,請使用didReceiveMemoryWarning。
dealloc在所有版本中都被調用。使用ARC,您不會稱爲超級,而且您也不像過去那樣釋放內存。
編輯:從iOS6的SDK UIViewController類描述:
viewDidUnload 當控制器的視圖是從 存儲器釋放時調用。 (不推薦使用iOS中6.0視圖是 低內存情況下不再清除,因此該方法不會被調用。)
什麼蘋果確實做的就是刪除備份存儲 - 緩存的像素。他們發現這消除了大部分消耗的內存,並且viewDidUnload實施效果不佳(他們在WWDC 2012上告訴我們這一點)。
1
如果您有一個對對象具有strong
引用的ivar,那麼只要該ivar指向該對象,該對象就會停留。
所以是的,你需要將指針設置爲nil
,否則你的強壯的引用將保持視圖的活躍。如果視圖是從一個筆尖加載的,並且它不是rootView
,那麼建議使用weak
,這樣您就不必擔心這個問題。
相關問題
- 1. IBOutlet和viewDidUnload在ARC下
- 2. ARC下的-viewDidUnload中的弱和強屬性
- 3. didReceiveMemoryWarning和viewDidUnload
- 4. 在使用ARC之前,iOS6之前還需要'dealloc'和'viewDidUnload'方法嗎?
- 5. didReceiveMemoryWarning和viewDidUnload內存問題
- 6. viewDidUnload和didReceiveMemoryWarning兼容性
- 7. 釋放viewDidUnload和dealloc兩者?
- 8. iPhone dealloc和viewDidUnload問題
- 9. ViewDidUnload和ShouldAutorotateToInterfaceOrientation替換爲MonoTouch
- 10. ARC,非ARC和繼承
- 11. 多少在viewDidUnload
- 12. SAFELY_RELEASE in ViewDidUnLoad
- 13. viewDidUnload與viewDidDisappear
- 14. super viewDidUnload in Cocoa
- 15. release view in viewDidUnload
- 16. iPhone開發 - ViewDidUnload
- 17. CCCallFunc和ARC
- 18. ARC和MBProgressHUD
- 19. UIViewControllers和ARC
- 20. ARC和CFRelease?
- 21. ARC __block和__weak
- 22. ARC和ASIHTTPRequest
- 23. ARC和autorelease
- 24. Cococs2d和Arc
- 25. ARC和ViewControllers
- 26. 橋接和ARC
- 27. AdWhirl和ARC
- 28. 與NSWindowController和ARC
- 29. Dealloc和ARC
- 30. @implementation,VAR和ARC
投票贊成有用的情況分析。順便說一句,你的意思是不要在iOS6和更高版本中使用'viewDidUnload'? – Carina
小費5中是否有拼寫錯誤? – Carina
@Carina,你能更具體嗎?我會嘗試讓子彈項目5現在更清晰。 –