2012-05-12 13 views
1

我是新來的iOS編程,我讀的視圖控制器編程指南,但有些東西還是不清楚我混淆有關的UIViewController內存管理和他們

  • 查看一個視圖控制器被破壞,但視圖控制器之間傳遞數據仍然存在,沒有具體說明我的自我想要摧毀任何視圖控制器還是我錯過了它。 VC指南稱,當內存開始縮短其他資源時,iOS會摧毀VC,VC的觀點也一樣?需要了解VC的內存管理,請閱讀我的第二點。

  • 在uinavigationcontroller中,我有一個tableviewcontroller,它顯示我的朋友列表,選擇我的朋友,我推着另一個VC聊天。問題是每次選擇朋友時,我是否必須創建一個聊天VC的新實例?這個聊天的VC對於我想要聊天的每個朋友來說都是獨一無二的?我也在DB中保存消息,以便誰顯示朋友窗口打開或關閉消息,用戶不會看到空白視圖。是否可能只有一個聊天VC的時刻被唯一地用於每個朋友(意味着只有特定朋友的消息顯示併發送給他,我試圖聊天)。我認爲這個問題與視圖控制器之間傳遞數據有關,但我很困惑。

我希望我已經明確定義了我的困惑,請忽略任何愚蠢的錯誤。

謝謝。

回答

3

回答您的查詢 -

  1. 查看一個視圖控制器被破壞,但是視圖控制器仍然

根據的UIViewController指南 - 它負責創建這些觀點並放棄他們的所有權在適當的時候,包括在低內存條件和視圖控制器本身被釋放時。

因此,我們需要獲得所有權來釋放視圖控制器。 另外UIViewController類通過其didReceiveMemoryWarning方法提供了一些自動處理低內存條件的方法,該方法釋放不需要的內存。

  1. 在你Scenario-

的TableView - >細胞推下一視圖的點擊 - >現在流行這種觀點回到表視圖(這裏存儲了釋放) - 再次表視圖> - >點擊單元格時,推動一個新的視圖控制器。

這樣處理內存。如果在一個層次,我們正在推動一些看法類似 -

VC1 - > VC2> VC3 - > VC4

現在,在這種情況下的導航控制器保持所有這些視圖控制器的情況下,作爲導航控制器爲我們提供了移動的靈活性落後。一旦我們回去,視圖控制器被從堆棧中移除,並且分配給它的內存被釋放。

語法使用 -

推視圖控制器 -

[self.navigationController pushViewController:myViewController animated:YES]; 
[myViewController release];//at the time of push we add this release statement. 

現在,當我們做一個流行,它的dealloc方法被調用,這是從堆棧中刪除。

[self.navigationController popViewControllerAnimated:YES];//That view is release from navigation stack 

希望這會消除你的疑惑。 結帳這個開發者頁面的更多細節 - http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

+0

感謝rishi這樣的細節和可愛的答案...我會盡力完成我的工作,如果我有任何問題,我會再次問你:) ...謝謝你................ –

+0

hi rishi ...請幫我一下,看看http://stackoverflow.com/questions/10600725/how-to-initialize-viewcontroller- every-time-in-uinavigationcontroller-which-is-i –

+0

@SweetJenny - 我會在某個時候看看。 – rishi