2011年冬季斯坦福大學公開課 iOS應用開發教程是個很經典的教程,這個老頭講的很給力。作筆記總結。objective-c
iOS的概述 -什麼是iOS設計模式
MVC - 面向對象的概念api
Objective-C-介紹下語言的概念數組
內核是mach 4.x BSD UNIX內核 mac OS 10操做系統,是個多任務的UNIX內核,在這層上提供了網絡,socket ,安全機制,文件系統,大部分這些api是c api 由於這寫都是UNIX代碼。咱們不會在這層上寫代碼。安全
這層開始面向對象了,提供了不少底層服務。提供運行時,多線程等。還有集合類,數組,字典啊。能夠把這層當作提供了面向對象的Core OS的封裝。網絡
好像離硬件更遠了,實際上是仍是很近, iPhone iPod iPad都是多媒體設備, 多媒體相關的代碼貫徹了整個iOS,在開發者眼中 core services都是多媒體的api。 多線程
咱們的 90%時間都用在這層, 按鈕,滾動條,各類控件等。mvc
工具: XCode 4 app
語言:objective-ciphone
Framework foundation UIKit
設計模式
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模式關係,請記住這張圖,後面講的課常常提到些關係:
當不少個model ,controller, view時,組成了mvc 羣,仍是要遵循上面的規則。
objective-c是c的超集,import 的使用,@property替代了原來類裏的實例變量,固然實例變量也可使用,@property幫你自動生成getter 和setter,@property以後就能夠用點號 self.topSpeed訪問變量了,至關於[self topSpeed]
經過這樣的方式聲明私有的方法。
我的感受這裏講的語法不太利於國人理解,比較繁瑣。這裏講的objective-c類方面的以後能夠參考:
容芳志 (http://blog.csdn.net/totogo2010)
本文遵循「署名-非商業用途-保持一致」創做公用協議