iOS5中UIViewController的新方法

來源:互聯網
上載者:User

標籤:

 
  1. iOS5中UIViewController的新方法
前言

在蘋果的 WWDC2011 大會視頻的
《Session 101 - What’s New in Cocoa》 和
《Session 102 - Implementing UIViewController Containment》 中介紹了蘋果在 iOS5 中給 UIViewController 新增加的 5 方法以及一個屬性:

// 方法
addChildViewController:
removeFromParentViewController:
transitionFromViewController:toViewController:duration:options:animations:completion:
willMoveToParentViewController:
didMoveToParentViewController:
// 屬性
@property(nonatomic,readonly) NSArray *childViewControllers
原來的問題

這些新增的方法和屬性用於改進我們的編程方式。那麼讓我們先看看以前的對於 UIViewController 的使用有什麼潛在的問題,認清問題,我們才能理解蘋果改變的意義。

在以前,一個 UIViewController 的 View 可能有很多小的子 view。這些子 view 很多時候被蓋在最後,我們在最外層 ViewController 的 viewDidLoad 方法中,用 addSubview 增加了大量的子 view。這些子 view 大多數不會一直處於介面上,只是在某些情況下才會出現,例如登陸失敗的提示 view,上傳附件成功的提示 view,網路失敗的提示 view 等。但是雖然這些 view 很少出現,但是我們卻常常一直把它們放在記憶體中。另外,當收到記憶體警告時,我們只能自己手工把這些 view 從 super view 中去掉。

改變

蘋果新的 API 增加了 addChildViewController 方法,並且希望我們在使用 addSubview 時,同時調用 [self addChildViewController:child] 方法將 sub view 對應的 viewController 也加到當前 ViewController 的管理中。對於那些當前暫時不需要顯示的 subview,只通過 addChildViewController 把 subViewController 加進去。需要顯示時再調用 transitionFromViewController:toViewController:duration:options:animations:completion 方法。

另外,當收到系統的 Memory Warning 的時候,系統也會自動把當前沒有顯示的 subview unload 掉,以節省記憶體。

參考資料

關於這個,這兒 有一篇不錯的文章介紹了一段 sample 代碼用於示範新 API 的使用 .

我也將其代碼稍加修改,增加了 view load, unload, appear, disappear 的事件 Log,以及收到 Memory Warning 時的 Log。代碼放在了 github 上,地址是 這裡,感興趣的同學可以自己下載下來看看源碼。

可以看到,這些 view 在沒有使用時,是不會被 load 的,並且當有 Memory Warning 時,當前沒有顯示的 view 自動被 unload 掉了。所以新的方法確實能有效地節省記憶體,也能方便地處理記憶體不足時的資源回收。運行 Log 如下:

[7397:f803] -[FirstViewController willMoveToParentViewController:][7397:f803] -[SecondViewController willMoveToParentViewController:][7397:f803] -[ThirdViewController willMoveToParentViewController:][7397:f803] -[ThirdViewController viewDidLoad][7397:f803] -[ThirdViewController viewWillAppear:][7397:f803] -[ThirdViewController viewDidAppear:][7397:f803] 生日提醒通知[7397:f803] -[SecondViewController viewDidLoad][7397:f803] -[ThirdViewController viewWillDisappear:][7397:f803] -[SecondViewController viewWillAppear:][7397:f803] -[SecondViewController viewDidAppear:][7397:f803] -[ThirdViewController viewDidDisappear:][7397:f803] 留言及回複[7397:f803] -[FirstViewController viewDidLoad][7397:f803] -[SecondViewController viewWillDisappear:][7397:f803] -[FirstViewController viewWillAppear:][7397:f803] -[FirstViewController viewDidAppear:][7397:f803] -[SecondViewController viewDidDisappear:][7397:f803] Received memory warning.[7397:f803] -[SecondViewController viewDidUnload][7397:f803] -[ThirdViewController viewDidUnload]

iOS5中UIViewController的新方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.