久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

loadView的用法 – Lonely Nights

 昵稱20917807 2015-02-02

UIViewController的loadView

用UIViewController有一段時間了,才發(fā)現(xiàn)以前對loadView的理解完全不到位,。

假如我們用Xcode新建一個View-based Application,,在ViewController.m中加上

- (void) loadView {
NSLog(@"loadView Called");
}

再增加viewDidLoad,按照一般的情況,,我們會有這樣的Code

- (void) viewDidLoad {
[super viewDidLoad];
UIButton *customButton = [UIButton buttonWith.....
......
[self.view addSubView:customButton];
}

現(xiàn)在打開MainWindow.xib,,刪掉其中的ViewController,并在AppDelegate.m的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

里增加ViewController的初始化

viewController = [[XXXViewController alloc] init];

編譯運行就有問題了,。Console中不斷的輸出loadView Called!

仔細(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,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多