2012年8月31日 星期五

很多css樣板的網站



對於網頁設計有興趣的朋友
可以到網站去下載css樣式表回去做參考




http://www.freecsstemplates.org/css-templates/

[ASP.Net MVC] ViewBag、ViewData 和 TempData 的區別


ViewData TempData 都可以傳遞弱類型資料,區別如下:
ViewData 只在當前 Action 中有效,生命週期和 View 相同;
TempData 的資料至多只能經過一次Controller傳遞,並且每個元素至多只能被訪問一次,訪問以後,自動被刪除。
TempData 一般用於臨時的緩存內容或拋出錯誤頁面時傳遞錯誤資訊,可以將TempData 在使用之前存儲到相應的 ViewData 中以備迴圈使用。

Index
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    ViewData["myName"] = "
我的名字";
    TempData["myAgeOne"] = "26
";
    TempData["myAgeTwo"] = "27
";
    return View();
}
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]

Index網頁呈現如下:



About
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]
<br />
年齡2@TempData["myAgeTwo"]



ViewBag.Name=ViewData["Name"];
相同:使用同一個字典集合(資料來源)
不同:ViewBag MVC3 新增語法,ViewBag 不再是字典的鍵值對結構,而是 dynamic 動態類型,它會在程式運行的時候動態解析。不過 ViewBag 雖然說因為 dynamic 的特點,在使用時可以不用類別轉換,但也因為這樣,在速度上是會比 ViewData 慢一些。

Dynamically Typed Object 動態類型
C#4.0加入了dynamic關鍵字,可以申明一個變數的static類型為dynamic
使用dynamic的好處在於,可以不去關心物件是來源於COM, IronPython, HTML DOM或者反射,只要知道有什麼方法可以調用就可以了,剩下的工作可以留給runtime
參考資料

2012年8月30日 星期四

[ASP.Net MVC] 電腦同時存在VS2010和VS2012的問題


我的電腦先後都安裝了VS2010和VS2012,如果在VS2010新建MVC3 的專案,執行後會出現以下問題:

'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies\System.Web.WebPages.dll' 和 'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll' 兩者中都有型別 'System.Web.Mvc.ModelClientValidationStringLengthRule' K:\Learning\Microsoft\MVC\Test Porject\OrdToFood\OrdToFood\Models\AccountModels.cs

Google後的解決方法:

1. 在Web.config檔裡,新增<appSettings>的設定,Webpages:Version為1.0.0.0.

<appSettings>
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>


2.在方案總管中,在專案名稱上右鍵選擇「卸載專案」,再重覆在專案名稱上右鍵選擇「編輯ProjectName.csproj」

   在裡面找到這兩行的參考字串:
<Reference Include="System.Web.WebPages"/> 
<Reference Include="System.Web.Helpers" />

  用下列的設定取代上面的字串:

<Reference Include="System.Web.WebPages, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
<Reference Include="System.Web.Helpers, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3.然後,儲存ProjectName.csproj之後,再把專案掛載回來就okok啦!


[ASP.Net MVC] 應使用 IIS Express 進行開發與測試

IIS 7.5 Express 是一套針對 ASP.NET 開發人員特別設計的 IIS 7.5 版本.

 Visual Studio 2010 SP1 已經正式將 IIS Express 整合進 Visual Studio 2010,也代表著在 Visual Studio 2010 裡面的網站專案都可以方便的指定使用 IIS Express 來執行網站。

一般沒有特別注意有這個東西的時後,我一般都是使用Web Development Server 來進行測試,不過這和部置至IIS上會有一些問題產生,尤其是IIS7以後的版本,所以,專家都建議用IIS 7.5 Express 喔!

專家的建議:




ASP.Net MVC – Razor的@helper 及 語法

在Razor的寫法裡,有很方便的@helper 及 @functons 語法,竟然有什麼好處呢?

@helper 是指預先編譯,會讓第一次網站執行時比較快速外。
有時後View需要做一些動作,剛好這個動作就是很多View會用都的,我們就可以考慮用@helper的方法來寫。

例如,View或許會重覆用到引用script的寫法,若要弄成一個共用的method,只要傳入script name即可,我們可以這樣做:

原本 Index.cshtml 是長這樣:


在 Index.cshtml 裡我新增 @helper Script(string scriptName) ,這個意思就是可以把。Script這個Method放入 @helper 裡面,以後要用Script這共用的方法時,只要@Script 就可以了喔!



以上的方法只有Index.cshtml可以自己用的很爽,但不能給其他的View共用。要怎麼辦呢?

在方案總管那新增App_Code目錄,再新增項目中選 Razor檢視頁面的型態。





在新增的Content.cshtml裡,先刪掉原有的預設tag,再把  @helper Script(string scriptName) 的內容移到Content.cshtml裡。


Index.cshtml在使用的時後,必須小改一下,只要改入App_Code目錄下的Content.cshtml的檔名即可。像這樣:



真是太好了,這樣大家就可以用了喔!

至於 @functons 只是有一點點不一樣,可以參考Razor 學習筆記 - @functions 和 @helper

這裡還有更多大師的教學喔!

HTML5 學習資源




這裡有一些HTML5 的版型。


2012年8月29日 星期三

[ASP.Net MVC] 與Ajax的運用


AjaxHelper 類別包含的方法可提供 MVC 應用程式內 ASP.NET AJAX 中的用戶端功能,例如,建立非同步表單和呈現連結。 AjaxHelper 類別支援非同步部分頁面更新。 AjaxHelper 類別的擴充程式位於 System.Web.Mvc.Ajax 命名空間中。

我有練習以下兩個比較基本的教學,都可以成功喔!



在MVC的語法上使用 @Ajax 是引用AjaxHelper 類別
常用的方法有 :

  1. ActionLink :已多載。 傳回錨定項目,其中包含指定之動作方法的 URL;按一下動作連結時,系統便會使用 JavaScript 以非同步方式叫用該動作方法。 
  2. BeginForm :將開頭的 <form> 標記寫入至回應。
  3. GlobalizationScript :傳回 HTML script 項目,其中包含定義文化特性資訊的全球化指令碼參考。
  4. RouteLink :已多載。 傳回錨定項目,其中包含指定之路徑值的虛擬路徑;按一下連結時,系統便會使用 JavaScript 以非同步方式對該虛擬路徑提出要求。


在View/Shared/_layout.cshtml檔案裡加上引用MicrosoftAjax.js及MicrosoftMvcAjax.js

AjaxController的寫法。PartialViewResult 是提供給 Ajax呼叫的進入點,將會回傳一個表單。PartialView("_IndexPartial", result) 會以部份檢視的方式呼叫 View/Ajax/_IndexPartial.cshtml 。

主頁 Index.cshtml。Ajax.BeginForm的寫法就是將整個表單丟給Server去處理的寫法。要指定UpdateTargetId,之後Ajax得到回覆後,會動態載入新頁面至 <div id="targetDiv" ... 的位置上。

動態載入的部份頁面 _IndexPartial.cshtml 。若是內部呼叫的頁面,可以加底線區分。


執行的結果就如同範例一樣,網頁不需要Refresh就可以動態載入下方的資料。


2012年8月28日 星期二

[ASP.Net MVC] 部署問題 - 使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗


繼上篇 MVC 網站部署的基礎篇之後,雖然首頁沒有問題,但只要有連資料庫的動作卻會出現-"使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗" 的問題。



還記得我們在IIS設定應用程式集區嗎? 從ASP.NET 4.0 (v4.0.30319) 的進階設定進去,可以找到「識別」為ApplicationPoolIdentity, 這是虛擬帳號,所以我們網站是沒有權限可以存取資料庫和寫入檔案。



當 ASP.NET 網頁程式需要寫入磁碟檔案時,就必須讓該帳戶具有寫入檔案的權限,方法有兩種:

1.指定的帳戶名稱:
    參考:http://bennyy1256.blogspot.tw/2012/03/iis-apppoolaspnet-v40.html

2.在 IIS更改ASP.NET 4.0 應用程式集區的「識別」為帳密方式。

  • 選自訂帳戶: (這裡我是用window登入的帳密)

  • 確定後,識別為有效的帳號:



這樣就完成了喔!

如果部署還有其他問題,可以參考以下網站:

ASP.NET 4 MVC 2 佈署到 IIS 7.5 問題 (1)






[ASP.Net MVC] 網站部署 - 基礎

參考資源:


1. 先至「開始或關閉Window功能」將「IIS管理服務」打勾。


2.至「控制台\所有控制台項目\系統管理工具\ IIS 管理員」新增網站。

   2.1 確定應用程式集區裡的 ASP.NET 4.0 (v4.0.30319)被啟動
  • 這有有一點要提醒:請務必註冊 ASP.NET 4.0 (v4.0.30319,如果是在 .NET Framework 4 安裝後才安裝 IIS 的,請記得執行 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -ir,若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir)。
  • 應用程式集區 - 確定  ASP.NET 4.0 狀態為"已啟動"。 


   2.2 裡站台裡新增網站
  



  • 在C:\inetpub先建好MvcDemo的目錄。
  • 應用程式集區的版本,請使用ASP.NET 4.0 (v4.0.30319)
  • port不要和其他的網站衝突即可。



3.  用系統管理員身份執行 VS 2012,開啟你已開發的MVC網站專案。方案總管中於專案名稱按右鍵執行「發行」。

  • 假設我們是新部署的網站,必須新增,只要新增過一次後,發行設定檔的清單會存有紀錄,下次只要選用即可。
  • 發行方法:檔案系統 ( 發行時必須將程式copy至主機發行)
  • 目標位置:和剛才新增網站的實體路徑相同。
  • 目的地URL:一樣是參考在IIS新增網站的資料。http://主機名稱 : 連接埠。

    發行後的結果: 耶~ 成功了!



這是基本的發行步驟,沒有遠端發行,目前我用VS2012  發行方法為 Web Deploy ,都一直失敗,所以發行方法先以檔案系統為練習。

下篇再來研究與資料庫的部署....


2012年8月27日 星期一

HTML基本語法


HTML基本語法可以參考以下:


  1. http://www.powmo.com/
  2. http://www.webpage.idv.tw/maillist/maillist1/new/01/allhtm.htm

[ASP.Net MVC]資料驗證 Model Validation

實做範例是參考:

ASP.NET MVC(6):資料驗證 Model Validation


程式碼的部份就不再貼上來了。已經講得非常詳細囉~

現在要補強我對Model Validation的觀念,小朱大師在MVC2 的時代有借介過,可以參考

ASP.NET MVC 2.0 新功能:資料塑模驗證 (Model Validation)


另外,黑暗執行緒大師的這一篇是一定要看的:

ASP.NET MVC 3 豬走路範例 (2)

只要先把要Model Validation 寫好,再寫Controller,這樣可以直接產生View,實在太神奇了!

在Controller裡加上兩個Action,Index()及Index(Models.ValueAddModel Model),第一個預設為[HttpGet],第二個則是標上[HttpPost]兩個ActionFilterAttribute,如此可區分出用http://localhost:6058/Index時會先連上 Index (),按Submit送出時再連到 Index(Models.ValueAddModel Model) (因為是HTTP POST)。

如果在Controller 寫以下的程式,可以POST回來的網頁資料 (HTML表單欄位資料) 被自動轉成 ValueAddModel  物件屬性,這就是神奇的Model Binding機制,透過這種方式,程式碼變得很簡潔!



.

[ASP.Net MVC3] 學習資源

最近在學ASP.Net MVC,是個幼幼班等級。好險網路上有好多高手的分享: 






有一系列的分享,從空的MVC專案開始初階的教學,我都是一步一步照著看,照著做,幫助很大喔!

很多寶物快來挖吧!!!  有一些操作和觀念的補強,是很好的參考。
.阿源哥哥的網頁應用程式自學心得報告,太值得看囉!



2012年8月15日 星期三

網站SSL加密原理簡介


資料來源:http://www.netadmin.com.tw/article_content.aspx?sn=1106140008


SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。
Secure Socket Layer說明

SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。最早是Netscape公司所提出,SSL的目標在於保證兩個應用間通訊的機密性和完整性以及可驗證伺服器身分

SSL目前已廣泛的應用在HTTP連線上,當以「https://」方式連上網站,如果瀏覽器的右下角有一個鑰匙,即代表該網站有支援SSL。SSL主要是運作在應用層與傳輸層間,如下圖示。

▲SSL主要是運作在應用層與傳輸層間。


主要分為兩層,上層為SSL Handshake、SSL Change Cipher spec及SSL Alert通訊協定,其主要作用如下所述:

SSL Handshake

這是SSL在傳輸之前事先用來溝通雙方(用戶端與伺服器端)所使用的加密演算法或密鑰交換演算法,或是在伺服器和用戶端之間安全地交換密鑰及雙方的身分認證等相關規則,讓雙方有所遵循。在身分認證方面,SSLHandshake可用來認證伺服器的身分。SSL Handshake的運作流程如下所述:

▲SSL Handshake的運作流程。


(1) SSL用戶端利用Client Hello訊息將本身支援的SSL版本、加密演算法、演算法等資訊發送給SSL伺服器。

(2) SSL伺服器收到Client Hello訊息並確定本次通訊採用的SSL版本和加密套件後,利用Server Hello訊息回覆給SSL用戶端。

(3) SSL伺服器將利用Certificate訊息將本身公鑰的數位憑證傳給SSL用戶端。

(4) SSL伺服器發送Server Hello Done訊息,通知SSL用戶端版本和加密套件協商結束,並開始進行密鑰交換。

(5) 當SSL用戶端驗證SSL伺服器的證書合法後,利用伺服器的證書中之公鑰加密SSL用戶端隨機生成的Premaster Secret(這是一個用在對稱加密密鑰產生中的46位元組的亂數字),並透過Client Key Exchange消息發送給SSL伺服器。

(6) SSL用戶端發送Change Cipher Spec消息,通知SSL伺服器後續報文將採用協商好的密鑰和加密套件進行加密。

(7) SSL用戶端計算已交互的握手消息的Hash值,利用協商好的密鑰和加密演算法處理Hash值,並透過Finished消息發送給SSL伺服器。SSL伺服器利用同樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,如果兩者相同,則證明密鑰和加密套件協商成功。

(8) SSL伺服器發送Change Cipher Spec訊息,通知SSL用戶端後續傳輸將採用協商好的密鑰和加密套件進行加密。

(9) SSL伺服器計算已交互的握手消息的Hash值,利用協商好的密鑰和加密套件處理Hash值,並透過Finished消息發送給SSL用戶端。SSL用戶端利用同樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,如果兩者相同,且MAC值驗證成功,則證明密鑰和加密套件協商成功。在SSL用戶端接收到SSL伺服器發送的Finished消息後,如果解密成功,則可以判斷SSL伺服器是數位證書的擁有者,即SSL伺服器身分驗證成功。這是因為只有擁有私鑰的SSL伺服器才能從Client Key Exchange消息中解密得到Premaster Secret,從而間接地實現了SSL用戶端對SSL伺服器的身分驗證。

SSL Change Cipher spec

用來變更雙方傳輸加解密的演算法與訊息驗證的規格,傳輸雙方可利用此協定進行溝通並設定本次傳輸所使用的協定。

SSL Alert

當傳送雙方發生錯誤時,用來傳遞通訊雙方所發生錯誤的訊息。訊息包含告警的嚴重級別和描述。

SSL Record Protocol

SSL Record Protocol主要提供訊息的完整性及機密性要求。就機密性而言,將會利用在SSL Handshake階段所得到的Key(加密金鑰)針對往來的HTTP通訊加密;至於完整性,SSL將使用MAC(Message Authentication Code)的方式來驗證訊息是否有被更動。MAC通常使用MD5演算法來確保往來的訊息並沒有被篡改。

以下簡單說明MD5演算法。MD5是使用「單向函數」來驗證訊息的完整性,單向Hash函數指的是給與一個鍵值(Key),即可透過鍵值藉由Hash函數取得唯一的雜湊值(Vale),例如F(KEY)=VALUE,如果存在兩個以上的不同鍵值可得到相同的雜湊值,即是指此Hash函數產生碰撞(Collision)。一個正常的單向函數是不能有碰撞情況的產生。

單向Hash(雜湊)定義如下所述,假設:
明文為M 雜湊函數是H 雜湊值為h = H(M)

單向(One-way)Hash函數需符合下列的功能:
● 對任意長度的明文輸入,須能產生固定長度的雜湊值輸出。
● 對於任何的明文一定可產生相對應的Hash值,且可利用硬體或軟體來產生。
● 須可從明文產生Hash值,但不能由Hash值反推而得到明文,例如h=H(“Hello!! World”) ;。假如得到Hash值E23d21341DEFA789;在任何情況下都不能由E23d21341DEFA789反推而得到「Hello!! World」的明文,這也就是單向Hash函數的特性。
● 對於明文 M1,在計算上是無法找出另一個明文 M2 ≠ M1,使得 H(M1) = H(M2)。 也就是一個明文產生一個Hash碼;而不能兩個不同的明文產生相同的Hash碼。
● 若H(M1) = H(M2),則M1 = M2,若H(M1)≠H(M2),則M1≠M2。亦即同一個明文產生同一個Hash碼,不同個明文產生不同的Hash碼。

接著以Linux系統為例,說明md5sum相關指令:



(1) 產生內容為hello world的「/tmp/test」檔案。
(2) 利用「/tmp/test」檔案內容產生md5檢驗碼,稱為known。
(3) 修改「/tmp/test」檔(僅差別一個空白字元)。
(4) 利用修改後的「/tmp/test」檔案內容產生md5檢驗碼。

由上得知,即使檔案僅更動一個字元,利用md5演算法所產生的檢驗碼也會完全不同。藉此來驗證訊息是否有被更動。簡而言之,SSL連線約可劃分為下列四個步驟:

▲SSL連線四個步驟。


1.SSL Client端發出ClientHello給SSL伺服器端。告知伺服器端本身可實現的算法列表和其他一些需要的資訊。

2.SSL的服務器端在接收ClientHello後會回應一個ServerHello,裡面確定了這次通訊所需要的演算法,並送出伺服器本身的憑證(資訊內包含身分及公鑰)。

3.SSL Client會新增一個秘密金鑰,並利用伺服器傳來的公鑰來加密,而且會回傳加密後的秘密金鑰密文給伺服器。

4.伺服器使用自己的私鑰解開秘密金鑰密文,取得秘密金鑰後,即利用此秘密金鑰來相互通訊。

上述流程中所謂的數位憑證,採用的格式為x509,x509的架構即如下圖中金字塔般的架構:

▲x509憑證架構。


其中,Root CA(在微軟系統的IE8稱為「根憑證授權單位」,讀者可看到IE8已經預設許多根憑證授權單位)授權給CA(在微軟系統的IE8稱為「中繼憑證授權單位」),然後使用者再至認證中心註冊來取得可證明身分的憑證,x509憑證主要的欄位內容如下:



在IE8中,可利用點選功能表【工具】→【網際網路選項】,然後按下〔內容〕活頁標籤內的〔憑證〕按鈕來查看憑證內容,如下圖所示。

以電子商務應用而言,SSL可輕易達成「機密性」、「完整性」及可幫助使用者驗證伺服器的身分。因為一個完善的網站會去申請相關憑證,而在申請憑證的過程中即會驗證該伺服器的身分。

▲查看憑證內容。


這對一個支援SSL的網站而言,使用者相信資料在傳輸的過程中不會外洩及不會被更改,並且會將資料傳送到正確的網站,但對於網站經營者來說,SSL機制由於未對使用者強制認證,所以無法分辦使用者的身分。也因此出現了SET(Secure Electronic Transaction)的機制。

SET是由Master和Visa兩大信用卡組織所提出的標準,主要用來提供一個安全的線上購物環境,SET與SSL最大的差異在於使用者必須取得認證,方可在符合SET規格的商務網站上進行交易,藉此確認使用者的身分。




.

2012年8月14日 星期二

申請iOS Developer Program 的帳號



可以參考這篇:







我們目前是用個人的開發帳號,若要申請公司或機關帳號,Apple 會要求你提供有公司英文名稱的法律文件,若沒有可以用以下a+b取代。

a.營利事業登記證(我是附公司設立登記表)
b.自己翻譯的公司英文名稱加蓋發票章就可以了。

 PS. 若是政府機關,應該要傳真的是「政府營利事業登記證」。

以上的文件要用傳真到國外去喔!


2012年8月10日 星期五

UIViewController的生命週期 - Part2



資料來源:

UIViewController的生命週期及iOS程式執行順序



當一個視圖控制器被創建,並在螢幕上顯示的時候。 代碼的執行順序


alloc
創建對象,分配空間
init (initWithNibName)
初始化物件,初始化資料
loadView
nib載入視圖 ,通常這一步不需要去干涉。除非你沒有使用xib檔創建視圖
viewDidLoad
載入完成,可以進行自訂資料以及動態創建其他控制項
viewWillAppear
視圖將出現在螢幕之前,馬上這個視圖就會被展現在螢幕上了
viewDidAppear
視圖已在螢幕上渲染完成

當一個視圖被移除螢幕並且銷毀的時候的執行順序,這個順序差不多和上面的相反


viewWillDisappear
視圖將被從螢幕上移除之前執行
viewDidDisappear
視圖已經被從螢幕上移除,使用者看不到這個視圖了
dealloc
視圖被銷毀,此處需要對你在initviewDidLoad中創建的物件進行釋放

關於viewDidUnload :在發生記憶體警告的時候如果本視圖不是當前螢幕上正在顯示的視圖的話 viewDidUnload將會被執行,本視圖的所有子視圖將被銷毀,以釋放記憶體,此時開發者需要手動對viewLoadviewDidLoad中創建的物件釋放記憶體。 因為當這個視圖再次顯示在螢幕上的時候,viewLoadviewDidLoad 再次被調用,以便再次構造視圖。
 當我們創建一個UIViewController類的物件時,通常系統會生成幾個預設的方法,這些方法大多與視圖的調用有關,但是在視圖調用時,這些方法的調用順序如何,需要整理下。
 通常上述方法包括如下幾種,這些方法都是UIViewController類的方法:

- (void)viewDidLoad

- (void)viewDidUnload

- (void)viewWillAppear:(BOOL)animated

- (void)viewDidAppear:(BOOL)animated

- (void)viewWillDisappear:(BOOL)animated

- (void)viewDidDisappear:(BOOL)animated



下面介紹下APP在運行時的調用順序。

1- (void)viewDidLoad

      一個APP在載入時會先通過調用loadView方法或者載入IB中創建的初始介面的方法,將視圖載入到記憶體中。然後會調用viewDidLoad方法來進行進一步的設置。通常,我們對於各種初始資料的載入,初始設定等很多內容,都會在這個方法中實現,所以這個方法是一個很常用,很重要的方法。

      但是要注意,這個方法只會在APP剛開始載入的時候調用一次,以後都不會再調用它了,所以只能用來做初始設置。

2) - (void)viewDidUnload;

      在記憶體足夠的情況下,軟體的視圖通常會一直保存在記憶體中,但是如果記憶體不夠,一些沒有正在顯示的viewcontroller就會收到記憶體不夠的警告,然後就會釋放自己擁有的視圖,以達到釋放記憶體的目的。但是系統只會釋放記憶體,並不會釋放物件的所有權,所以通常我們需要在這裡將不需要在記憶體中保留的物件釋放所有權,也就是將其指針置為nil

      這個方法通常並不會在視圖變換的時候被調用,而只會在系統退出或者收到記憶體警告的時候才會被調用。但是由於我們需要保證在收到記憶體警告的時候能夠對其作出反應,所以這個方法通常我們都需要去實現。

      另外,即使在設備上按了Home鍵之後,系統也不一定會調用這個方法,因為IOS4之後,系統允許將APP在後臺掛起,並將其繼續滯留在記憶體中,因此,viewcontroller並不會調用這個方法來清除記憶體。

3- (void)viewWillAppear:(BOOL)animated;

      系統在載入所有資料後,將會在螢幕上顯示視圖,這時會先調用這個方法。通常我們會利用這個方法,對即將顯示的視圖做進一步的設置。例如,我們可以利用這個方法來設置設備不同方向時該如何顯示。

      另外一方面,APP有多個視圖時,在視圖間切換時,並不會再次載入viewDidLoad方法,所以如果在調入視圖時,需要對資料做更新,就只能在這個方法內實現了。所以這個方法也非常常用。

4) - (void)viewDidAppear:(BOOL)animated

      有時候,由於一些特殊的原因,我們不能在viewWillApper方法裡,對視圖進行更新。那麼可以重寫這個方法,在這裡對正在顯示的視圖進行進一步的設置。

5) - (void)viewWillDisappear:(BOOL)animated

      在視圖變換時,當前視圖在即將被移除、或者被覆蓋時,會調用這個方法進行一些善後的處理和設置。

      由於在IOS4之後,系統允許將APP在後臺掛起,所以在按了Home鍵之後,系統並不會調用這個方法,因為就這個APP本身而言,APP顯示的view,仍是掛起時候的view,所以並不會調用這個方法。

6) - (void)viewDidDisappear:(BOOL)animated

      我們可以重寫這個方法,對已經消失,或者被覆蓋,或者已經隱藏了的視圖做一些其他操作。


IOS 開發 loadView viewDidLoad 的區別


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

viewDidLoad 此方法只有當viewnib檔初始化的時候才被調用。

loadView 此方法在控制器的viewnil的時候被調用。 此方法用於以程式設計的方式創建view的時候用到。 如:

1.
 2.- ( void ) loadView {
 3.    UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
 4.mainScreen] .applicationFrame] ;
 5.    [ view setBackgroundColor:_color] ;
 6.    self.view = view;
 7.    [ view release] ;
 8.}
 9.

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



 .