亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

-awakeFromNib或-viewDidLoad應該使用哪個?

-awakeFromNib或-viewDidLoad應該使用哪個?

慕村9548890 2019-12-20 10:58:07
我最近在我的應用程序中遇到問題,我在UIViewController子類的-awakeFromNib方法中創建的某些子視圖 從視圖中消失了。經過一番摸索之后,我發現移動我輸入的代碼-awakeFromNib可以-viewDidLoad解決問題。似乎-awakeFromNib在從筆尖取消存檔UIViewController時僅調用一次,并且-viewDidLoad在每次取消存檔視圖時都調用一次。那么最佳實踐是什么?看來UIViewController -awakeFromNib不應在視圖中添加任何視圖,而應該在中完成-viewDidLoad。我理解正確嗎?還是我比我想的更困惑?
查看完整描述

3 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

awakeFromNib控制器本身未從筆尖存檔時調用。創建/取消存檔視圖viewDidLoad時調用。當控制器的視圖存儲在單獨的nib文件中時,這一區別尤其重要。


查看完整回答
反對 回復 2019-12-20
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

同樣重要的是,awakeFromNib從內存警告中恢復后將永遠不會調用該函數。但是,該viewDidLoad函數將被調用。


查看完整回答
反對 回復 2019-12-20
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

我將通過舉一個例子來回答:

如果定義customCell類和customCell.xib文件,然后使用加載單元格
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options,則在未歸檔xib中的對象時將調用awakeFromNib。

如果定義customViewController,則customViewController使用創建時- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil。當viewDidLoad加載到視圖層次結構中時,它將被調用。

一些相關的混淆方法:

  • (void)loadView; 如果子類不使用筆尖,則應在此處創建其自定義視圖層次結構。如果未指定筆尖名稱,則loadView將嘗試加載名稱與視圖控制器類相同的筆尖。如果不存在此類筆尖,則必須在調用-view之前調用-setView:,或重寫-loadView方法以編程方式設置視圖。-loadView絕對不能直接調用。

  • (void)viewDidLoad:加載視圖后調用。對于用代碼創建的viewController,它在-loadView之后。對于從筆尖未存檔的視圖控制器,這是在設置視圖之后。


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 649 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號