網上總結 loadView 和 viewDidLoad

iPhone開發必不可少的要用到這兩個方法
他們均可以用來在視圖載入的時候,初始化一些內容
可是他們有什麼區別呢?
viewDidLoad
此方法只有當view從nib文件初始化的時候才被調用
viewDidLoad用於初始化,加載時用到的。

loadView
此方法在控制器的view爲nil的時候被調用。
此方法用於以編程的方式建立view的時候用到。
loadView是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。如:
- (
void ) loadView {
    UIView *view
=
[ [ UIView alloc] initWithFrame:[ UIScreen

mainScreen] .applicationFrame] ;

[ view
setBackgroundColor:_color
] ;

    self.view = view;
[ view release] ;
}


你在控制器中實現了loadView方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view
控制器會收到didReceiveMemoryWarning的消息。

默認的實現是檢查當前控制器的view是否在使用。若是它的view不在當前正在使用的view
hierarchy裏面,且你的控制器實現了loadView方法,那麼這個view將被release,
loadView方法將被再次調用來建立一個新的view。
----------------------------------------------------------------------------------------------------------------------
編程

viewDidLoad ,不管是從xib中加載視圖,仍是從loadview生成視圖,都會被調用。

--------------------------------------------------------------------------------------------------------------------------------------------- 數組

UIViewController 的內存管理
在 iOS3.0 後,UIViewController 多了一個叫作
viewDidUnLoad 的方法。
   先看下 UIViewController 從建立 view
到展現的流程的幾個函數

    -init
    -initWithNibName:bundle:

這兩個方法都是初始化一個
vc,但請注意 view
不是這時候載入的

    -loadView
    -viewDidLoad

    當一個視圖準備展示時,vc 首先會判斷
view 是否已經建立不然便經過以前指定的 xib 文件來初始化 view,以及綁定其餘關係(若沒有指定 xib 文件,則默認會搜索和 vc 同名的
xib,好比 myNameViewController 就會搜索 myNameViewController.xib 文件)

    如果沒有
xib 文件,你就能夠在 loadview 中本身手動建立這個 viewControoler 須要的視圖。接下來就是調用到
-viewDidLoad,許多人喜歡在這裏作些其餘事情,好比作個 http 請求、創建個數組啥的。這裏若不處理正確,-viewDidUnload
激活時內存就容易泄露了,稍後提到。

    -view()appear
    -view()disappear

    這幾個方法就不解釋了

    -viewDidUnload

    該方法在收到內存警告,同時該視圖並不在當前界面顯示時候會被調用,此時該
controller 的 view 已經被釋放並賦值爲 nil。
接下來你要作的是

把實例變量的子視圖釋放(IBOulet
的,以及本身添加的)
其餘實例變量,好比以前在 -viewDidLoaded 中實例的數據數組、http 請求釋放掉
    由於當該
viewController 再次被激活準備顯示時(好比 navigationControler 返回到上一級),vc 發現本身的 view
爲空後會重複以前的流程直到把 view
給建立起來。若沒將本身額外添加的子視圖,各類類實例變量釋放,這裏便會從新再次建立。

    因而,內存泄露了。
緩存

-------------------------------------------------------------------------------------------------------------------------------------------注意iphone開發中的這兩個函數viewWillAppear和viewDidAppear
每當視圖準備在屏幕上顯示,或者視圖已在屏幕上徹底顯示時,將調用這兩個方法。

viewWillAppear:方法更新準備顯示的視圖的信息。調用時,視圖可能尚未被加載。
使用viewDidAppear:來觸發視圖徹底顯示在屏幕上以後的行爲,例如任何動畫。
viewdidload是當程序第一次加載view時調用,之後都不會用到,而viewDidAppear是每當切換到view時就調用。

loadView和viewDidLoad方法。假設不使用xib文件對視圖佈局,那麼loadView方法必須設置屏幕,並對任何子視圖佈局。每當繼承一個具體的子類,例如UITableViewController或UITabBarController時,務必調用[super
loadView]或者實現viewDidLoad。這樣一來,在進行定製以前,父類能夠對屏幕進行適當的設置。當代碼基於具體的子類時,蘋果的文檔和示例代碼鼓勵使用viewDidLoad。

viewDidLoad
此方法只有當view從nib文件初始化的時候才被調用
viewDidLoad用於初始化,加載時用到的。
loadView
此方法在控制器的view爲nil的時候被調用。 此方法用於以編程的方式建立view的時候用到。
loadView是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。

viewDidLoad
,不管是從xib中加載視圖,仍是從loadview生成視圖,都會被調用。
app

------------------------------------------------------------------------------------------------------------------------ iphone

loadView 和 viewDidLoad 是 iPhone 開發中確定要用到的兩個方法。 他們均可以用來在視圖載入的時候初始化一些內容。
可是他們有什麼區別呢?
    viewDidLoad 方法只有當
view 從 nib 文件初始化的時候才被調用。viewDidLoad 用於初始化,加載時用到。

    loadView 方法在控制器的 view 爲 nil
的時候被調用。
此方法用於以編程的方式建立 view 的時候用到。loadView
是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。如:
- ( void ) loadView {
   
UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
mainScreen]
.applicationFrame] ;
[ view setBackgroundColor:_color] ;
    self.view =
view;
[ view release] ;
}

    你在控制器中實現了 loadView
方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view 控制器會收到 didReceiveMemoryWarning
的消息。 默認的實現是檢查當前控制器的 view 是否在使用。 若是它的 view 不在當前正在使用的 view hierarchy 裏面,且你的控制器實現了
loadView 方法,那麼這個 view 將被 release, loadView 方法將被再次調用來建立一個新的 view。


nil是空的意思。至關於NULL。nil表示一個Objctive-C對象,這個對象的指針指向空(沒有東西就是空)。

首字母大寫的Nil和nil有一點不同,Nil定義一個指向空的類(是Class,而不是對象)。
在Objective-C裏,nil對象被設計來跟NULL空指針關聯的。他們的區別就是nil是一個對象,而NULL只是一個值
在Objective-C中,你來對象在功能上等價於其餘不少語言中的NULL指針。區別是能夠對nil調用方法,而不致致使程序崩潰或拋出異常。 函數

--------------------------------------------------------------------------------------------------------------------- 佈局

1、loadView
永遠不要主動調用這個函數。view
controller會在view的property被請求而且當前view值爲nil時調用這個函數
若是你手動建立view,你應該重載這個函數。若是你用IB建立view並初始化view
controller,那就意味着你使用initWithNibName:bundle:方法,這時,你不該該重載loadView函數。
這個方法的默認實現是這樣:先尋找有關可用的nib文件的信息,根據這個信息來加載nib文件,若是沒有有關nib文件的信息,默認實現會建立一個空白的UIView對象,而後讓這個對象成爲controller的主view。
因此,重載這個函數時,你也應該這麼作。並把子類的view賦給view屬性(property)(你create的view必須是惟一的實例,而且不被其餘任何controller共享),並且你重載的這個函數不該該調用super。
若是你要進行進一步初始化你的views,你應該在viewDidLoad函數中去作。在iOS
3.0以及更高版本中,你應該重載viewDidUnload函數來釋聽任何對view的引用或者它裏面的內容(子view等等)。

這個網上的資料都說的很不全面,尤爲是藍色字部分。
2、viewDidLoad
這個函數在controller加載了相關的views後被調用,而不論這些views存儲在nib文件裏仍是在loadView函數中生成。而多數狀況下是作nib文件的後續工做。
3、viewDidUnload
這個函數是viewDidLoad的對立函數。在程序內存欠缺時,這個函數被controller調用,來釋放它的view以及view相關的對象。
因爲controller一般保存這view以及相關object的引用,因此你必須使用這個函數來放棄這些對象的全部權以便內存回收。但不要釋放那些難以重建的數據。
一般controller會保存nib文件創建的views的引用,可是也可能會保存着loadView函數建立的對象的引用。最完美的方法是使用合成器方法:
self.myCertainView = nil
這樣合成器會release這個view,若是你沒有使用property,那麼你得本身顯示釋放這個view。
網上對這個函數的描述含含糊糊,看了等於沒看。
4、結論
因此流程應該是這樣:
(loadView/nib文件)來加載view到內存
——>viewDidLoad函數進一步初始化這些view
——>內存不足時,調用viewDidUnload函數釋放views
—->當須要使用view時有回到第一步
如此循環
動畫

---------------------------------------------------------------------------------------------------------------------- spa

viewDidUnload方法‍
當系統內存吃緊的時候會調用該方法(注:viewController沒有被dealloc)
內存吃緊時,在iPhone OS 3.0以前didReceiveMemoryWarning是釋放無用內存的惟一方式,可是OS
3.0及之後viewDidUnload方法是更好的方式

在該方法中將全部IBOutlet(不管是property仍是實例變量)置爲nil(系統release
view時已經將其release掉了)
設計

-----------------------------------------------------------------------------------------------------------------------注意iphone開發中的這兩個函數viewWillAppear和viewDidAppear
每當視圖準備在屏幕上顯示,或者視圖已在屏幕上徹底顯示時,將調用這兩個方法。
viewWillAppear:方法更新準備顯示的視圖的信息。調用時,視圖可能尚未被加載。
使用viewDidAppear:來觸發視圖徹底顯示在屏幕上以後的行爲,例如任何動畫。
loadView和viewDidLoad方法。假設不使用xib文件對視圖佈局,那麼loadView方法必須設置屏幕,並對任何子視圖佈局。每當繼承一個具體的子類,例如UITableViewController或UITabBarController時,務必調用[super
loadView]或者實現viewDidLoad。這樣一來,在進行定製以前,父類能夠對屏幕進行適當的設置。當代碼基於具體的子類時,蘋果的文檔和示例代碼鼓勵使用viewDidLoad。


iPhone開發必不可少的要用到這兩個方法(loadView VS viewDidLoad
)
他們均可以用來在視圖載入的時候,初始化一些內容 可是他們有什麼區別呢?


viewDidLoad
此方法只有當view從nib文件初始化的時候才被調用
viewDidLoad用於初始化,加載時用到的。
loadView 此方法在控制器的view爲nil的時候被調用。
此方法用於以編程的方式建立view的時候用到。
[font=lucida grande  ]loadView是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。

viewDidLoad
,不管是從xib中加載視圖,仍是從loadview生成視圖,都會被調用。

---------------------------------------------------------------------------------------------------------------------

iPhone開發必不可少的要用到這兩個方法他們均可以用來在視圖載入的時候,初始化一些內容。
可是他們有什麼區別呢?

viewDidLoad
此方法只有當view從nib文件初始化的時候才被調用

loadView
此方法在控制器的view爲nil的時候被調用
此方法用於以編程的方式建立view的時候用到。

如:

-
(void)loadView {

   
UIView *view = [[UIView alloc] initWithFrame:[UIScreen   
mainScreen].applicationFrame];
    [view
setBackgroundColor:_color];

    self.view = view;
    [view release];
}

你在控制器中實現了loadView方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view
控制器會收到didReceiveMemoryWarning的消息。
默認的實現是檢查當前控制器的view是否在使用。
若是它的view不在當前正在使用的view hierarchy裏面,且你的控制器實現了loadView方法,那麼這個view將被release,
loadView方法將被再次調用來建立一個新的view。

------------------------------------------------------------------------------------------------------------------------

loadView 和 viewDidLoad 是 iPhone
開發中確定要用到的兩個方法。

他們均可以用來在視圖載入的時候初始化一些內容。
可是他們有什麼區別呢?

viewDidLoad 方法只有當 view 從 nib
文件初始化的時候才被調用。viewDidLoad 用於初始化,加載時用到。


loadView 方法在控制器的 view 爲nil 的時候被調用此方法用於以編程的方式建立 view 的時候用到。loadView
是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。
如:

     
- ( void ) loadView {
    UIView *view = [ [ UIView
alloc] initWithFrame:[ UIScreen
mainScreen] .applicationFrame] ;
[ view
setBackgroundColor:_color] ;
    self.view = view;
[ view release]
;
}

你在控制器中實現了 loadView
方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。若是設備內存不足的時候,view 控制器會收到 didReceiveMemoryWarning
的消息
默認的實現是檢查當前控制器的 view 是否在使用。 若是它的 view 不在當前正在使用的 view hierarchy
裏面,且你的控制器實現了 loadView 方法,那麼這個 view 將被 release, loadView 方法將被再次調用來建立一個新的
view。

------------------------------------------------------------------------------------------------------------------------

viewDidUnload方法
當系統內存吃緊的時候會調用該方法(注:viewController沒有被dealloc)
內存吃緊時,在iPhone OS 3.0以前didReceiveMemoryWarning是釋放無用內存的惟一方式,可是OS
3.0及之後viewDidUnload方法是更好的方式

------------------------------------------------------------------------------------------------------------------------

由init、loadView、viewDidLoad、viewDidUnload、dealloc的關係提及
 init方法
  在init方法中實例化必要的對象(聽從LazyLoad思想)
‍  init方法中初始化ViewController自己
 loadView方法
  當view須要被展現而它倒是nil時,viewController會調用該方法。不要直接調用該方法。
  若是手工維護views,必須重載重寫該方法
  若是使用IB維護views,必須不能重載重寫該方法
 loadView和IB構建view
  你在控制器中實現了loadView方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view
控制器會收到didReceiveMemoryWarning的消息。 默認的實現是檢查當前控制器的view是否在使用。 若是它的view不在當前正在使用的view
hierarchy裏面,且你的控制器實現了loadView方法,那麼這個view將被release,
loadView方法將被再次調用來建立一個新的view。

 viewDidLoad方法
  viewDidLoad
此方法只有當view從nib文件初始化的時候才被調用。
  重載重寫該方法以進一步定製view
  在iPhone OS
3.0及以後的版本中,還應該重載重寫viewDidUnload來釋放對view的任何索引

  viewDidLoad後調用數據Model

 viewDidUnload方法‍
  當系統內存吃緊的時候會調用該方法(注:viewController沒有被dealloc)
  內存吃緊時,在iPhone OS 3.0以前didReceiveMemoryWarning是釋放無用內存的惟一方式,可是OS
3.0及之後viewDidUnload方法是更好的方式

  在該方法中將全部IBOutlet(不管是property仍是實例變量)置爲nil(系統release
view時已經將其release掉了)

  在該方法中釋放其餘與view有關的對象、其餘在運行時建立(但非系統必須)的對象、在viewDidLoad中被建立的對象、緩存數據等
 release對象後,將對象置爲nil(IBOutlet只須要將其置爲nil,系統release
view時已經將其release掉了)

  通常認爲viewDidUnload是viewDidLoad的鏡像,由於當view被從新請求時,viewDidLoad還會從新被執行
  viewDidUnload中被release的對象必須是很容易被從新建立的對象(好比在viewDidLoad或其餘方法中建立的對象),不要release用戶數據或其餘很難被從新建立的對象
 dealloc方法
  viewDidUnload和dealloc方法沒有關聯,dealloc仍是繼續作它該作的事情。

文章二:
  viewDidUnload
該方法在收到內存警告,同時該視圖並不在當前界面顯示時候會被調用,此時該 controller 的 view
已經被釋放並賦值爲 nil。
接下來你要作的是
把實例變量的子視圖釋放(IBOulet 的,以及本身添加的)
其餘實例變量,好比以前在
-viewDidLoaded 中實例的數據數組、http 請求釋放掉
    由於當該 viewController 再次被激活準備顯示時(好比
navigationControler 返回到上一級),vc 發現本身的 view 爲空後會重複以前的流程直到把 view
給建立起來。若沒將本身額外添加的子視圖,各類類實例變量釋放,這裏便會從新再次建立

---------------------------------------------------------------------------------------------------------------------

loadView 和 viewDidLoad 的區別
分享
  

loadView 和 viewDidLoad 是 iPhone 開發中確定要用到的兩個方法。
他們均可以用來在視圖載入的時候初始化一些內容。 可是他們有什麼區別呢?
    viewDidLoad 方法只有當 view 從 nib
文件初始化的時候才被調用。viewDidLoad 用於初始化,加載時用到。
    loadView 方法在控制器的 view 爲 nil 的時候被調用。
此方法用於以編程的方式建立 view 的時候用到。loadView
是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。如:
-
(void)loadView {
    UIView * tmp=[[UIView alloc] initWithFrame:CGRectMake(0,
0, 320, 480)];
    tmp.backgroundColor=[UIColor
orangeColor];
    self.view=tmp;
    [tmp release];
}
    你在控制器中實現了
loadView 方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view 控制器會收到
didReceiveMemoryWarning 的消息。 默認的實現是檢查當前控制器的 view 是否在使用。 若是它的 view 不在當前正在使用的 view
hierarchy 裏面,且你的控制器實現了 loadView 方法,那麼這個 view 將被 release, loadView
方法將被再次調用來建立一個新的 view。

----------------------------------------------------------------------------------------------------------------------

-(void)viewWillAppear:(BOOL)animated,- (void)viewDidLoad
的區別。

viewwillappear是每次視圖控制器的視圖出現前執行的代碼。而viewdidload是每次視圖控制器載入是執行的代碼。
好比說:當a視圖控制器的視圖第一次出現是兩個都要執行,但當a被push後有pop回來時,只有viewwillappear執行。


loadView 和 viewDidLoad 的區別
分享
  

loadView 和 viewDidLoad 是 iPhone 開發中確定要用到的兩個方法。 他們均可以用來在視圖載入的時候初始化一些內容。 可是他們有什麼區別呢?     viewDidLoad 方法只有當 view 從 nib 文件初始化的時候才被調用。viewDidLoad 用於初始化,加載時用到。     loadView 方法在控制器的 view 爲 nil 的時候被調用。 此方法用於以編程的方式建立 view 的時候用到。loadView 是使用代碼生成視圖的時候,當視圖第一次載入的時候調用的方法。用於使用(寫)代碼來實現控件。用於使用代碼生成控件的函數。如: - (void)loadView {     UIView * tmp=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];     tmp.backgroundColor=[UIColor orangeColor];     self.view=tmp;     [tmp release]; }     你在控制器中實現了 loadView 方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 若是設備內存不足的時候, view 控制器會收到 didReceiveMemoryWarning 的消息。 默認的實現是檢查當前控制器的 view 是否在使用。 若是它的 view 不在當前正在使用的 view hierarchy 裏面,且你的控制器實現了 loadView 方法,那麼這個 view 將被 release, loadView 方法將被再次調用來建立一個新的 view。

相關文章
相關標籤/搜索