2011斯坦福大學iOS應用開發教程學習筆記(第一課)MVC.and.Introduction.to.Objective-C

2011年冬季斯坦福大學公開課 iOS應用開發教程是個很經典的教程,這個老頭講的很給力。作筆記總結。objective-c

第一課名稱: MVC and Introduction to Objective-C

這課的主要內容有:

iOS的概述  -什麼是iOS設計模式

MVC - 面向對象的概念api

Objective-C-介紹下語言的概念數組

iOS包括四層

內核

內核是mach 4.x BSD UNIX內核 mac OS  10操做系統,是個多任務的UNIX內核,在這層上提供了網絡,socket ,安全機制,文件系統,大部分這些api是c api 由於這寫都是UNIX代碼。咱們不會在這層上寫代碼。安全

 

Core Sevices層

這層開始面向對象了,提供了不少底層服務。提供運行時,多線程等。還有集合類,數組,字典啊。能夠把這層當作提供了面向對象的Core OS的封裝。網絡

 

 

多媒體層

好像離硬件更遠了,實際上是仍是很近, iPhone  iPod iPad都是多媒體設備, 多媒體相關的代碼貫徹了整個iOS,在開發者眼中 core services都是多媒體的api。 多線程

 

Cocoa Touch 層

咱們的 90%時間都用在這層, 按鈕,滾動條,各類控件等。mvc

介紹平臺的組成:

工具: XCode 4   app

語言:objective-ciphone

Framework  foundation   UIKit 

設計模式

重點介紹下MVC

三大陣營: model  view  controller 

model 

描述的是你的程序是什麼。好比一個太空船的程序,好比飛船的位置,型號,飛船有多少個機槍,護甲多少。

controller

描述你的是model如何展示在用戶面前,它獲取到了飛船在太空中的位置,而後算出來怎麼在屏幕上展示出來。好比飛船的多個機槍如何在屏幕上展示。總之controller控制如何在UI上展示model。

view 

是controller的小弟,view是工具。儘量是view通用的,按鈕,滾動條等,決不能包含任何如何去表現的邏輯。controller用這些通用的view作model想要作的事情。

有了這三個陣營,剩下的就是他們之間管理和通訊了。

controller->model 徹底容許。由於controller 要問model如何在屏幕展示內容。

controller->view  徹底容許 。  通信屬性outlet,在controller裏建立outlets傳輸到view中。

model---view  之間永遠不會通信。由於model和界面沒有關係。view是要重用的,model和view關聯,當model改變後,view得重寫。

view->controller 經過 target action這個結構來通信。controller本身畫了個 target(目標) ,而後把action(動做)交給view。當view發生一些事情,好比按鈕被按下,它把action 發送到target,這時候controller就知道了。view 和controller還有別的通信機制,好比view要告訴controller發生什麼事情 ,將要發生什麼事情,或詢問是否容許,用到了will did should 。controller把本身設置成委託,用協議來完成委託。來回應will,did,should。這時候,view 仍是不知道迴應的controller是哪一個類。

記住:views 不擁有它們展現的數據。

那view如何獲取數據呢?

經過協議獲取,delegation 方法,好比data at , count.

數據源的delegation永遠是controller,不多是model。 

三大陣營的工做流程是這樣的:controller去model那取數據,告訴view展示數據在屏幕上。即便只有一行代碼,也得有controller來參與,不能壞了規矩。

model不能主動勾搭controller,那model數據有變化了,那怎麼讓controller知道呢?Notification 或KVO機制。當model數據改變,它就廣播,controller就收到了。

MVC模式關係,請記住這張圖,後面講的課常常提到些關係:

mvc羣:

當不少個model ,controller, view時,組成了mvc 羣,仍是要遵循上面的規則。

objective-c語言的基本概念。

objective-c是c的超集,import 的使用,@property替代了原來類裏的實例變量,固然實例變量也可使用,@property幫你自動生成getter 和setter,@property以後就能夠用點號 self.topSpeed訪問變量了,至關於[self topSpeed]

 

[cpp]  view plain copy
  1. @interface Spaceship()  
  2. // declaration of private methods (as needed)  
  3. @end  

經過這樣的方式聲明私有的方法。

 

我的感受這裏講的語法不太利於國人理解,比較繁瑣。這裏講的objective-c類方面的以後能夠參考: 

Objective-C語法之類和對象

可能更容易理解。

斯坦福官方全部教程對應的源碼,做業,ppt下載地址: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall
相關文章
相關標籤/搜索