標籤:blog http io color ar os 使用 sp for
2011年冬季斯坦福大學公開課 iOS應用開發教程是個很經典的教程,這個老頭講的很給力。做筆記總結。
第一課名稱: MVC and Introduction to Objective-C這課的主要內容有:
iOS的概述 -什麼是iOS
MVC - 物件導向的概念
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%時間都用在這層, 按鈕,捲軸,各種控制項等。
介紹平台的組成:
工具: XCode 4
語言:objective-c
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 plaincopy
- @interface Spaceship()
- ???// declaration of private methods (as needed)
- @end
通過這樣的方式聲明私人的方法。
個人感覺這裡講的文法不太利於國人理解,比較繁瑣。這裡講的objective-c類方面的之後可以參考:
Objective-C文法之類和對象
可能更容易理解。視頻觀看地址:http://i.youku.com/u/UOTYxNjIxNTY=/videos蘋果官方視頻地址:https://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255?mt=10斯坦福官方所有教程對應的源碼,作業,ppt:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall視頻中的ppt下載:http://download.csdn.net/detail/totogo2010/4798766
容芳志 (http://blog.csdn.net/totogo2010)
本文遵循“署名-非商業用途-保持一致”創作公用協議
2011斯坦福大學iOS應用開發教程學習筆記(第一課)MVC.and.Introduction.to.Objective-C