2012年4月30日 星期一

storyboard和xib不同的人生道路



從Storyboard和Xib產生的view controller其實在一開始初始化時即有著細微的差異。如上圖所示,雖然最後都會來到viewDidLoad的終點,但在之前卻各自經歷不同的人生。從Storyboard產生的view controller比較坎坷,繞了遠路,經歷initWithCoder:和awakeFromNib,從xib產生的view controller只經歷了initWithNibName:bundle:。除了呼叫method的差異,還有以下幾點需注意之處:

1. IBOutlet連結的元件要等到viewDidLoad裡才出現。
 如果我們太心急,在awakeFromNib即存取,只會空手而回,取到空氣。(nil)

2. 當記憶體不足時,viewDidUnload可能被呼叫。到時候view controller的畫面要再出現時,viewDidLoad將再度被呼叫。因此viewDidLoad可能被多次呼叫,不適合將只想做一次的事置於其中。比方計數的count變數,若是在viewDidLoad時設定初始值0,那麼當 viewDidLoad再次被呼叫時,辛苦累積多時的count就被清空了,多可惜呀。所以我們最好將設定初始值的程式碼置於initWithCoder: , awakeFromNib, initWithNibName:bundle:。



沒有留言:

張貼留言