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
總結
以上是生活随笔為你收集整理的loadView的使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TMS320DM642学习----第一篇
- 下一篇: 常用的好用的window工具