UIViewController的loadView 用UIViewController有一段時間了,才發(fā)現(xiàn)以前對loadView的理解完全不到位,。 假如我們用Xcode新建一個View-based Application,,在ViewController.m中加上 仔細(xì)的閱讀loadView的文檔,,才知道loadView不是這么用的。 loadView在每一次使用self.view這個property,,并且self.view為nil的時候被調(diào)用,,用以產(chǎn)生一個有效的self.view。這個接口原本是為了讓我們自定義view用的,。在不被subclass實現(xiàn)的情況下,,也就是[super loadView]的效果,應(yīng)該就是產(chǎn)生了一個有效的view,,也就是一個空白的view,。 在上面這種情況下,loadView被實現(xiàn)為空(只有一條打印語句),,而且我們沒有通過XIB初始化ViewController,,所以在viewDidLoad被執(zhí)行時,self.view是為nil的,。所以在執(zhí)行[self.view addSubView:customButton]時,,loadView被調(diào)用,用來產(chǎn)生一個有效的view,,使得self.view不再為nil,。罷特,我們錯了(-_-!),。我們的loadView什么也沒有做,,于是就出現(xiàn)了上面的情形,不斷的調(diào)用一個什么都不做的loadView…. 當(dāng)然,,我們只要在loadView中增加一句[super loadView]就沒有問題了,。但這并不是Cocoa的設(shè)計者所期望的。 loadView僅僅應(yīng)該在開發(fā)者希望自行通過編碼而不是Interface Builder定制view的時候被實現(xiàn),,而且不應(yīng)該在其中調(diào)用[super loadView],,你的loadView中應(yīng)該有self.view = …這樣的行為。 如果僅僅是想要在當(dāng)前view上增加一些UIButton或是UILabel,,應(yīng)該在viewDidLoad里去做,,此時不要實現(xiàn)自己的loadView,。 |
|
來自: 昵稱20917807 > 《iOS》