Re: [問題] 請問StoryBoard的使用方式

看板MacDev作者 (新竹好無聊)時間12年前 (2012/10/23 17:24), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串6/7 (看更多)
※ 引述《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
從 Interface Builder 直接拉出來 outlet 產生的程式碼不
10/23 21:08, 1F

10/23 21:08, , 2F
是本來就 weak 嗎
10/23 21:08, 2F

10/23 21:38, , 3F
我記得預設是strong,得手動選擇weak,之後才會都是weak
10/23 21:38, 3F
※ 編輯: NelsonT 來自: 114.42.25.209 (10/23 21:38)

10/26 18:33, , 4F
十分清楚~
10/26 18:33, 4F
文章代碼(AID): #1GXc9TpC (MacDev)
文章代碼(AID): #1GXc9TpC (MacDev)