1. 程式人生 > >ios view的建立過程

ios view的建立過程

師傅發我一堆view的建立函式,目的讓我知道view的建立過程。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewWillAppear:(BOOL)animated
{

}
- (void)viewDidAppear:(BOOL)animated
{

}
- (void)loadView
{

}
- (void)layoutSublayersOfLayer:(CALayer *)layer
{

}
- (void)viewWillLayoutSubviews
{

}
 - (void)viewDidLoad
{

}

拿到這函式我也沒多想就建立了一個single View application 然後建立一個viewcontroller 就將師傅的函式複製進去,然後在AppDelegeteD.m檔案中寫
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

 
    self.window.rootViewController = [[MyViewController alloc]init];
    
    [self.window makeKeyAndVisible];
    // Override point for customization after application launch.
    return YES;
}

然後執行   。。。。。。涼了。。。出現錯誤了;

啟動起來黑屏,然後是報這樣一個錯誤Application windows are expected to have a root view controller at the end of application launch

2014-08-13 15:16:45.924 任務1副本[2629:60b] -[YouVC loadView]
2014-08-13 15:16:45.925 任務1副本[2629:60b] -[YouVC viewDidLoad]
2014-08-13 15:16:45.925 任務1副本[2629:60b] -[YouVC loadView]
2014-08-13 15:16:45.926 任務1副本[2629:60b] -[YouVC viewDidLoad]
2014-08-13 15:16:45.927 任務1副本[2629:60b] -[YouVC loadView]
2014-08-13 15:16:45.927 任務1副本[2629:60b] -[YouVC viewDidLoad]
2014-08-13 15:16:45.928 任務1副本[2629:60b] -[YouVC loadView]
2014-08-13 15:16:45.928 任務1副本[2629:60b] -[YouVC viewDidLoad]
2014-08-13 15:16:45.929 任務1副本[2629:60b] Application windows are expected to have a root view controller at the end of application launch


無解 ,網上搜得所有方案都不對。我把焦點放在了 self.window.rootviewcontroller = ....這句話上了;

我開始想它出錯的原因,為什麼這些方法呼叫了好幾遍,單步除錯發現這些函式不止是在初始化的init時候呼叫。

我又新建了一個viewcontroller就加了一個背景色,結果能執行,我又試著將師傅給的程式碼貼上去,結果又出現錯誤了。

我就開始挨個試是什麼出現了問題,最後讓我找到了原因出在-(void)loadview這個函式上面;

我又開始查詢這個函式,最後從M了個J老師這獲得了答案:

原來在每次呼叫view的時候,如果view為空,則會呼叫這個函式;他的作用就是來建立一個view,首先載入xib 如果沒有xib 則自動建立一個大小320*480 的空白view;

在程式的

-(void)loadview 中加入了[super loadview];後程序能夠運行了;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
-(id)init
{
    if(self = [super init])
    {
        self.view.frame=[[UIScreen mainScreen]bounds];
        self.view.backgroundColor = [UIColor orangeColor];
    }
    return self;
}
- (void)loadView
{
   // [super loadView];
    NSLog(@"%s",__FUNCTION__);

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%s",__FUNCTION__);
    // Do any additional setup after loading the view from its nib.
}
- (void)viewWillAppear:(BOOL)animated
{
    NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidAppear:(BOOL)animated
{
    NSLog(@"%s",__FUNCTION__);
}

- (void)layoutSublayersOfLayer:(CALayer *)layer
{
    NSLog(@"%s",__FUNCTION__);
    
}
- (void)viewWillLayoutSubviews
{
    NSLog(@"%s",__FUNCTION__);
}

 

執行結果:

2014-08-13 15:35:54.783 任務1副本[2660:60b] -[YouVC loadView]
2014-08-13 15:35:54.783 任務1副本[2660:60b] -[YouVC viewDidLoad]
2014-08-13 15:35:54.784 任務1副本[2660:60b] -[YouVC viewWillAppear:]
2014-08-13 15:35:54.785 任務1副本[2660:60b] -[YouVC viewWillLayoutSubviews]
2014-08-13 15:35:54.835 任務1副本[2660:60b] -[YouVC viewDidAppear:]

這個就是 建立view的時候,相關view建立函式的執行次序:

M了個J老師的部落格 http://www.cnblogs.com/mjios/archive/2013/02/26/2933667.html裡面詳細講述了這幾個函式;

相關推薦

ios view建立過程

師傅發我一堆view的建立函式,目的讓我知道view的建立過程。 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super ini

Android應用程式視窗(Activity)的檢視物件(View)的建立過程分析

       從前文可知道,每一個Activity元件都有一個關聯的Window物件,用來描述一個應用程式視窗。每一個應用程式視窗內部又包含有一個View物件,用來描述應用程式視窗的檢視。應用程式視窗檢視是真正用來實現UI內容和佈局的,也就是說,每一個Activity元件的U

Android AMS(五) Activity的檢視物件(View)的建立過程分析

從Android AMS(四) Activity的視窗物件(Window)的建立過程分析知道,每一個Activity元件都有一個關聯的Window物件,用來描述一個應用程式視窗。每一個應用程式視窗內部又包含有一個View物件,用來描述應用程式視窗的檢視。應用程式視窗檢視是真正用來實現UI內容和佈局的

ios建立可以拖動的view原理和實現詳解(含程式碼)

有時候我們會需要在介面上拖動view;uiview是繼承於uiresponder的,所以可以響應觸控相關的事件。 重點是以下一組方法: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  -

OSPF路由網絡建立過程

路由器 數據庫 優先級 網絡 通告 發現鄰居--選舉DR/BDR--形成鏈路狀態數據庫--SPF算法--形成路由網絡在 發現鄰居--選舉DR/BDR 階段路由器之間互相發送Hello報文,根據Hello包,每臺路由器生成了基本的Datebase;然後根據優先級和RID在每一個網段選出一個D

OC學習小結之ios運行過程詳解

for cat 用戶 with res nbsp c學習 launch cati 1)ios核心類 UIView 視圖,屏幕上能看得見的東西都是視圖,例如:按鈕、文本標簽、和表格等 UIViewController:內部默認有個視圖(UIView),負責管理UIView的

驅動學習之gpiolib的建立過程

linux驅動 gpiolib1:gpiolib的學習重點(1)gpiolib的建立過程:gpiolib和虛擬地址映射類似,也是需要一個建立過程的,因此在學習的時候,我們需要明白gpiolib是什麽時候建立的,建立函數在哪被調用的。(2)gpiolib的使用方法:申請、使用、釋放(3)gpiolib的架構:涉

tcp/ip 建立過程

計算機網絡1. tcp /ip : 在osi網絡參考模型中,它提供著可靠的傳輸服務/ 定義:傳輸控制協議 a: tcp/ip 的建立過程,通過三次握手,和四次揮手來完成。2. 何為三次握手? 首先在這假設,syn="m" ,syn 就是客戶端在向務端發送鏈接請求,服務端

OSPF鄰接關系建立過程詳解

拓撲 由於 ethernet 並且 interval fec 進入 根據 alt 1.Down-OSPF路由器啟動後開始向外發Hello,但是沒有收到對方的Hello報文。2.Attempt-NBMA才會由Down進入此狀態,此狀態只在NBMA網絡上存在,手工指定鄰居後便會

ALSA聲卡驅動的DAPM(二)-建立過程

使用 浪費 pri mach tin 寄存器 rac 控件 所有 在上一篇文章中,我們重點介紹了widget、path、route之間的關系及其widget的註冊; http://www.cnblogs.com/linhaostudy/p/8509899.html

詳解BLE連接建立過程

問題 提高 pty ID ast 信息 text event 比較 同一款手機,為什麽跟某些設備可以連接成功,而跟另外一些設備又連接不成功?同一個設備,為什麽跟某些手機可以建立連接,而跟另外一些手機又無法建立連接?同一個手機,同一個設備,為什麽他們兩者有時候連起來很快,有時

SSH 項目建立過程

nag als ID 策略 struts-2 VM ssp 進行 成對 1. 加入 Spring   1). 加入 jar 包  2). 配置 web.xml 文件 <context-param> <param-name>conte

物件建立過程

物件的建立過程: 1.指令引數能否在常量池中定位到一個類的符號引用; 2.檢查這個符號引用代表的類是否已經被載入、解析和初始化,如果沒有必須先執行類載入過程; 3.類載入檢查通過後,虛擬機器分配記憶體(物件的記憶體大小在類載入完成後就可以確定)。記憶體分配有“指標碰撞”和“空閒列表

Android原始碼解析之應用程式資源管理器(Asset Manager)的建立過程分析

轉載自:https://blog.csdn.net/luoshengyang/article/details/8791064 我們分析了Android應用程式資源的編譯和打包過程,最終得到的應用程式資源就與應用程式程式碼一起打包在一個APK檔案中。Android應用程式在執行的過程中,是通過一個

Netty NioEventLoop 建立過程原始碼分析

原文:https://wangwei.one/posts/netty-nioeventloop-analyse-for-create.html 前面 ,我們分析了Netty中的Channel元件,本篇我們來介紹一下與Channel關聯的另一個核心的元件 —— EventLo

Android小知識-剖析Retrofit中ServiceMethod相關引數以及建立過程

本平臺的文章更新會有延遲,大家可以關注微信公眾號-顧林海,包括年底前會更新kotlin由淺入深系列教程,目前計劃在微信公眾號進行首發,如果大家想獲取最新教程,請關注微信公眾號,謝謝! 在上一節《Android小知識-剖析Retrofit中的網路請求介面》介紹了在Retrofit中通過動態代理獲取網

圖解Elasticsearch之一——索引建立過程

0、引言 這是國外培訓ppt課程的節選內容。 以下是我們的Core Elasticsearch:Operations課程中的一些很棒的幻燈片,它們有助於解釋分片分配的概念。 我們建議您更全面地瞭解這一點,但我會在此提供我們培訓的概述: 分片分配是將分片分配給節點的過程。 這可能發

Qt學習筆記(1) — 深入瞭解Hello World的建立過程

年初的時候就準備學習Qt了,因為工作原因被擱淺好久,現在開始學也不晚,以後每週更新2遍博文作為總結。 學過Windows開發的,會覺得Qt很親切,學起來不是很費勁(PS: 環境搭建比較簡單,本文不作說明),但是還得從Hello World開始一步步來。下面,筆者將用4種不同的方

iOS Git建立gitignore檔案, gitignore 不起作用解決辦法

1.建立gitignore檔案 開啟終端, cd 進入到專案所在目錄,輸入touch gitignore即可, 然後編輯 gitignore, 編輯成功之後, mv gitignore .gitignore換名字, 這個時候.gitignore檔案會自動消失, 點檔案不能顯示的. 在該資料夾下打

ios呼叫openvpn過程與出現的問題

必要條件 1 開發者賬號,付費的那種 2 真機除錯 tips:如果不達到條件,會報一定的錯誤,但是錯誤並不能明確指向真正的問題,因此需要注意。 過程 參考:https://www.jianshu.com/p/66039ea97656 一. 建立NetWork