Re: [問題] 請問StoryBoard的使用方式
※ 引述《HellCloud (Invisible)》之銘言:
: ※ 引述《NelsonT (新竹好無聊)》之銘言:
: : 理論上會,
: : 實際上你把程式碼寫好,不要寫出 memory leak 的程式,還比較重要。
: : 反倒不用太在意一直連下去會吃掉記憶體。
: : 而且在真實的使用情境,使用者也不會一直進入下一層,總會回上層的,
: : 你只要確保目前這層 view controller 被關閉之前有把記憶體放掉就好。
: 補充一下
: 我最近在開發的東西就是可以依使用者的點選一直進入下一層沒有終點的app。
: 在這狀況如果真的發生記憶體不夠的問題在iOS5或6都會在log畫面中看到
: (通常在使用UIWebView時最常發生)
: Received Memory Warning
: iOS5和6的不同在於
: iOS5會幫你偷偷對前一個ViewController執行
: (如果有包NavigationController的話就是你push來那一頁)
: (以A->B->C->D->E->F來看,如果B頁面Received Memory Warning,A頁面就會做
: 以下的動作)
: 1. viewdidunload
: 2. dealloc
: (在pop以後)
: 3. viewdidload
: iOS6 則沒有dealloc掉. 但也可以手動加上
在 iOS 6,viewDidUnload 不會被呼叫,因為 view 不會被 unload。
當收到 memory warning,iOS 6 之前的版本會把 view 釋放掉,
所以我們必須在 viewDidUnload 裡頭放掉 subview 跟一些用不到的資料。
但是在 iOS 6,當收到 memory warning,
view 不會被釋放掉,而是顯示這個 view 的 bitmap 被放掉,
所以 viewDidUnload 不會被呼叫(因為 view 沒有被放掉)。
目前看起來比較好,而且可以相容於 iOS 5 & 6 的作法是:
1. 在 didReceiveMemoryWarning 釋放用不到或可輕易重新取得的資料
2. 在 viewDidUnload 釋放 subview
3. 把 IBOutlets 都設為 weak,而不是預設的 Strong
4. 你手動建立的 subview,都設為 property
不要在 viewDidLoad 裡頭初始化這些 subview,而是在個別的 getter 裡頭初始化
這裡有更詳細的說明
http://tinyurl.com/98edppn
我也還在摸索記憶體管理的方式,歡迎大家一起來討論 :D
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.19.37
→
10/23 21:08, , 1F
10/23 21:08, 1F
→
10/23 21:08, , 2F
10/23 21:08, 2F
→
10/23 21:38, , 3F
10/23 21:38, 3F
※ 編輯: NelsonT 來自: 114.42.25.209 (10/23 21:38)
推
10/26 18:33, , 4F
10/26 18:33, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 7 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章