loadView的使用總結

一、loadView?

1.?loadView什么時候被調用?

? ? ? ? ? 每次訪問UIViewController的view(如 controller.view、self.view)并且view為nil,loadView方法就會被調用

2. 有什么作用

   loadView 方法是用來負責創建UIViewController的view

3. 默認實現是怎樣的?

    默認實現即[super loadView]里面做了好多事情:

               1> 它會先去查找與UIViewController相關聯的xib文件,通過加載xib文件來創建UIViewController的view

* ?如果在初始化UIViewController指定了xib文件名,就會根據傳入的xib文件名加載對應的xib文件
[[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil];
* ?如果沒有明顯地傳xib文件名,就會加載跟UIViewController同名的xib文件
[[MJViewController alloc] init]; // 加載MJViewController.xib
2> 如果沒有找到相關聯的xib文件,就會創建一個空白的UIView,然后賦值給UIViewController的view屬性,大致如下
self.view = [[[UIView alloc] initWithFrame:
[UIScreen mainScreen].applicationFrame] autorelease]; ?
// applicationFrame的值是:{{x = 0, y = 20}, {width = 320, height = 460}}?
[super loadView]里面就大致完成1>和2>中敘述的內容

4.如何正確使用這個方法?

    UIViewController 可以通過xib文件來創建,但在某些情況下,xib不是那么靈活,所有我們有些時候想通過代碼來創建UIView     

比如: self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];

? ? ? ? ? ? ? ? ? ? ? 如果想通過代碼來創建UIViewController的view,就要重寫loadView方法,并且不需要調用[super loadView],第三點已經提到若沒有xib文件,

? ? ? ? ? ? ? ? ? ? ? [super loadView]默認創建一個空白的UIView。我們既然要通過代碼來自定義UIVIew,那么就沒必要事先創建一個空白的UIView,以節省不必要的開銷,正確的做法應該是這樣的:

? ? ? ? ? ? ? ? ? ? ? ? ???- (void)loadView {

self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
}
不需要調用[super loadView],即使調用了也不會出錯,只是造成了一些不必要的開銷。總而言之,蘋果設計這個方法是給我們自定義UIViewController的view用的

二、viewDidLoad

1. 什么時候被調用?

  無論是通過xib文件還是重寫loadView 方法創建的UIViewController的view,在view創建完畢后,最終都會調用viewDidLoad方法的。

?2. 有什么作用?

  ? 一般會在這里做界面上的初始化的操作,比如往view中添加一些子視圖、從數據庫或者網絡加載模型數據裝配到子視圖中。

? ? ? ?      例如:

          ?- (void)viewDidLoad {

[super viewDidLoad];
//添加一個按鈕
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
[button addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}

三、viewDidUnload

1.什么時候被調用?

iOS設備的內存是極其有限的,如果應用程序占用的內存過多的話,系統就會對應用程序發出內存警告。UIViewController就會收到didReceiveMemoryWarning消息。  didReceiveMemoryWarning方法的默認實現是:如果當前UIViewController的view不在應用程序的視圖層次結構(View Hierarchy)中,即view的superview為nil的時候,就會將view釋放,并且調用viewDidUnload方法

2.有什么作用??

上面說到,發出內存警告且view被釋放的時候就會調用viewDidUnload方法,所以一般在釋放資源,主要是釋放界面元素相關的資源,將相關的實例都賦值為nil
- (void)viewDidUnload {
[super viewDidUnload];
self.name = nil;
self.pwd = nil;
}

3.dealloc也是用來釋放資源的,那跟viewDidUnload有什么關系??

當發出內存警告調用viewDidUnload方法時,只是釋放了view,并沒有釋放UIViewController,所以并不會調用dealloc方法。即viewDidUnload和dealloc方法并沒有任何關系,dealloc方法只會在UIViewController被釋放的時候調用

四、三個方法的關系

? ? 1. ? ?第一次訪問UIViewController的view時,view為nil,然后 ?機會調用loadview方法來創建view

? ? 2. ? view創建完畢后調用viewDidLoad方法進行界面元素的初始化

  3.?? 當內存警告時,系統可能會釋放UIViewController,將view賦值為nil,并且調用viewDidUnload方法

  4. ?當再次訪問UIViewController的view時,view已經在3中被賦值為nil,所以又要調用loadview方法重新創建view

  5. ?view被重新創建完畢后,還會調用viewDidLoad 方法進行元素的初始化     ? ? ? ? ? ? ? ?

?

轉載于:https://www.cnblogs.com/gwzf/p/7157834.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫備份 java jar_Java實現數據庫備份并利用ant導入SQL腳本

?數據備份對于經常在運維部署方面的工作者來說,是一件相對簡單的事情,都可以通過某一個SQL工具進行備份,但是如果在項目運行當中,我們需要對數據進行實時,或者是每隔一星期,一個月,等等進行數據…

JSF簡單Ajax示例

今天,我們將看到一些使用JSF的Ajax簡單樣本。 如果要查看有關JSF / Web應用程序的其他文章,請單擊以下鏈接: 重定向后的JSF持久化對象和消息 , 使用JAAS和JSF進行用戶登錄驗證 , JSF:Converter and Bean Au…

常用的好用的window工具

1. FastStone Capture截圖錄屏軟件 百度軟件中心:http://rj.baidu.com/soft/detail/13504.html?ald 注冊企業版: 用戶名:c1ikm 注冊碼:AXMQX-RMMMJ-DBHHF-WIHTV 中文輸入亂碼解決方法: 2. Notepad文本編輯器&#xff…

表分區

http://www.cnblogs.com/leestar54/p/6225821.html轉載于:https://www.cnblogs.com/jouny/p/6262850.html

java飛鴿傳書_feige 飛鴿傳書源代碼java 實現不錯的聯系網絡編程的資料飛鴿傳書的GUI(java實現) - 下載 - 搜珍網...

我的飛鴿傳書/FileFilter.java我的飛鴿傳書/FileNameExtensionFilter.java我的飛鴿傳書/飛鴿傳書/classes/feige/About.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers$ReadMessageThread.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers.class我的飛鴿傳書…

JAXB和根元素

XmlRootElement是人們習慣于與JAXB(JSR-222)一起使用的注釋。 目的是將根元素與類唯一關聯。 由于JAXB類映射到復雜類型,因此一個類有可能對應于多個根元素。 在這種情況下,無法使用XmlRootElement ,人們開始感到有些困…

python socket模塊實現udp通信_Python基于socket模塊實現UDP通信功能示例

Python基于socket模塊實現UDP通信功能示例本文實例講述了Python基于socket模塊實現UDP通信功能。分享給大家供大家參考,具體如下:一 代碼1、接收端import socket#使用IPV4協議,使用UDP協議傳輸數據ssocket.socket(socket.AF_INET, socket.SOC…

Hibernate緩存基礎知識

最近,我嘗試了休眠緩存。 在這篇文章中,我想分享我的經驗,并指出Hibernate Second Level Cache的一些細節。 在此過程中,我將指導您閱讀一些有助于實現緩存的文章。 讓我們從地面開始。 在休眠狀態下緩存 緩存功能旨在減少必要的…

TP3.2之WHERE組合條件處理

1、條件都是int類型: $User->where(type1 AND status1)->select(); 2、條件包含字符串類型: 使用3.1以上版本的話,使用字符串條件的時候,建議配合預處理機制,確保更加安全, $Model->where("i…

linux-ssh遠程后臺執行腳本-放置后臺執行問題(轉)

寫了一個監控負載的小腳本(死循環,測試結束后再kill對應進程),因需要監控多臺服務器,所以在一臺服務器上使用ssh統一執行腳本遇到問題:使用ssh root172.16.146.20 /usr/local/luly/loadavg.sh 2 2 &執行…

python2.7輸入函數_Python2.7的用戶輸入函數有問題,無法讓這些輸入與程序一起工作...

我對python世界還是個新手,雖然我已經用php做了很多工作。。。這是我的案子。。。在我正在用python2.7為我的小程序編寫一些代碼。在在那個程序中,我需要2個用戶輸入,它們都是數字。在第一個數字不得大于11,也不得小于0。在第二個…

創建Java動態代理

Java動態代理機制提供了一種有趣的方式來創建代理實例。 不過&#xff0c;創建動態代理的步驟有些繁瑣&#xff0c;請考慮將代理用于審核服務實例的方法調用所花費的時間– public interface InventoryService {public Inventory create(Inventory inventory);public List<I…

html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?...

新特性&#xff1a; 1. 拖拽釋放(Drag and drop) API 2. 語義化更好的內容標簽&#xff08;header,nav,footer,aside,article,section&#xff09; 3. 音頻、視頻API(audio,video) 4. 畫布(Canvas) API 5. 地理(Geolocation) API 6. 本地離線存儲 localStorage 長期存儲數據&am…

Substring with Concatenation of All Words 題解

題意 You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters. For example, give…

java udp丟包_linux 系統 UDP 丟包問題分析思路

最近工作中遇到某個服務器應用程序 UDP 丟包&#xff0c;在排查過程中查閱了很多資料&#xff0c;總結出來這篇文章&#xff0c;供更多人參考。在開始之前&#xff0c;我們先用一張圖解釋 linux 系統接收網絡報文的過程。● 首先網絡報文通過物理網線發送到網卡● 網絡驅動程…

【SQL】分組數據,過濾分組-group by , having

學習筆記&#xff0c;原文來自http://blog.csdn.net/robinjwong/article/details/24845125 創建分組 - GROUP BY 分組是在SELECT語句的GROUP BY子句中建立的。它的作用是通過一定的規則將一個數據集劃分成若干個小的區域&#xff0c;然后針對若干個小區域進行數據處理。SELECT子…

使用EasyMock或Mockito

我大部分時間都在使用EasyMock &#xff0c;但是最近我和一些非常愿意使用Mockito的人一起工作。 我不打算在同一項目中使用兩個框架來實現相同的目的&#xff0c;因此我采用了Mockito 。 因此&#xff0c;在過去的幾個月中&#xff0c;我一直在使用Mockito &#xff0c;這是我…

CentOS下iptables 配置詳解

如果你的IPTABLES基礎知識還不了解,建議先去看看. 開始配置 我們來配置一個filter表的防火墻. (1)查看本機關于IPTABLES的設置情況 [roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy…

java lambda 多個參數_Java Lambda行為參數化

Java Lambda行為參數化我們可以將lambda表達式作為參數傳遞給方法。例子以下代碼創建了一個名為Calculator的函數接口。在Calculator中有一個稱為calculate的方法&#xff0c;它接受兩個int參數并返回一個int值。在Main類中有一個引擎方法&#xff0c;它接受函數接口Calculator…