說說loadView

一個關(guān)于loadView的問題,由于平時開發(fā)中對這塊沒注意,現(xiàn)在來分析分析loadView

  • 調(diào)用時機:訪問controller的view時,如果view是nil或者說view還沒有加載,loadView方法就會被調(diào)用。

默認的loadView做的事情:

  • 如果再初始化controller的時候指定了xib文件名,就會根據(jù)傳入的xib文件名加載對應的xib文件
FirstViewController *controller =
 [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
  • 如果在創(chuàng)建的時沒有顯式的傳遞xib文件名,就會加載跟controller同名的xib文件
    :在iOS8中,必須顯式的指定xib文件名,不然創(chuàng)建不成功
FirstViewController *controller = [[FirstViewController alloc] init];
  • 如果沒有找到相關(guān)聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView。

如果重寫了loadView方法,并沒有給view賦值,下面的例子中viewDidLoad用到self.view時,發(fā)現(xiàn)self.view沒有值,就會調(diào)用loadView,還是沒有值,就會繼續(xù)調(diào)用,會死循環(huán)調(diào)用viewLoad,一直到程序crash。

- (void)loadView {

    NSLog(@"loadview ----ffff");
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor grayColor];
}

還有一種導致死循環(huán)的情況,在loadView中調(diào)用self.view,但是此時self.view沒有值,就會自己調(diào)用自己死循環(huán)。

- (void)loadView {
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view.backgroundColor = [UIColor blueColor];
    self.view = view;
}

正確使用姿勢

如果我們想重寫controller的view,就需要重寫loadView,在里面對view進行賦值,此時不要寫[super loadView],因為它會做上面說的那默認的三步。正確的寫法:在loadView中使用view時,確保self.view已經(jīng)有值。

- (void)loadView {
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = view;
    self.view.backgroundColor = [UIColor blueColor];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • /* UIViewController is a generic controller base class th...
    DanDanC閱讀 2,030評論 0 2
  • UIViewController 的生命周期答:來源:http://www.cnblogs.com/dahe007...
    IreneWu閱讀 695評論 1 2
  • 1.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,127評論 0 10
  • 一、深復制和淺復制的區(qū)別? 1、淺復制:只是復制了指向?qū)ο蟮闹羔?,即兩個指針指向同一塊內(nèi)存單元!而不復制指向?qū)ο蟮?..
    iOS_Alex閱讀 1,521評論 1 27
  • http://www.devstore.cn/essay/essayInfo/6525.html【原文地址】 序言...
    起名好難_fz閱讀 716評論 1 1

友情鏈接更多精彩內(nèi)容