作者NelsonT (新竹好无聊)
看板MacDev
标题Re: [问题] 请问StoryBoard的使用方式
时间Tue Oct 23 17:24:43 2012
※ 引述《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
1F:→ uranusjr:从 Interface Builder 直接拉出来 outlet 产生的程式码不 10/23 21:08
2F:→ uranusjr:是本来就 weak 吗 10/23 21:08
3F:→ NelsonT:我记得预设是strong,得手动选择weak,之後才会都是weak 10/23 21:38
※ 编辑: NelsonT 来自: 114.42.25.209 (10/23 21:38)
4F:推 HellCloud:十分清楚~ 10/26 18:33