CS193P学习笔记(一)
1>iOS系統分層
? 1.Core OS
- 核心操作系統層,很接近硬件的一層;
- 本質是一個Unix內核,使用基于BSD的Unix版本,擁有文件系統、套接字、權限等一系列Unix所具有的特性,并且還具備一些特別應用于移動設備的東西,例如電源管理、用于安全管理的鑰匙串訪問;
- 大多數API是使用C語言寫的;?
? 2.Core Service
- 核心服務層,這是之上的面向對象的一層,這能讓你總能在面向對象的層上進行編程;
- 這一層擁有數組、字典、字符串對象等等;并且還有面向對象的方式來訪問文件系統;擁有多線程操作;
- 這一層是面向對象的;?
? 3.Media
- 媒體層包括OpenAL、PDF、Core Animation、OpenGL ES等等;
? 4.Cocoa Touch
- 觸控應用層,這是UI層;包括Controls、Multi-Touch等等;
2>MVC架構
MVC,模型(Model)、視圖(View)、控制器(Controller),也就是一種將應用中的所有類組織起來的策略;我們將所有的類歸為三種類型:模型、視圖、控制器;如何知道哪個類屬于哪一類型呢?
- 模型定義了程序是“什么”的問題;譬如一個紙牌匹配游戲,紙牌、牌堆、甚至玩法的邏輯都是獨立于UI并且存在模型當中的;
- 控制器實現將模型當中的數據顯示到屏幕上;紙牌如何抽取到屏幕上是控制器的工作,控制器的任務就是弄清楚如何將這些牌顯示到屏幕上;
- 視圖則是控制器的“仆從“,是控制器需要使用的類,視圖中的東西會被用于構建UI,直接與用戶交互;
MVC之間是如何通信的呢?
-
控制器訪問模型:控制器訪問模型能夠完全地、不受限地訪問,能夠按照任何方式使用模型的公共API;
-
控制器訪問視圖:同樣是完全不受限地,因為控制器需要隨意使喚自己的”仆從“,并且我們定義這樣一個屬性:Outlet,當控制器指向視圖時,我們將該指針稱為Outlet;
-
模型與視圖相互訪問:MVC建議我們避免這樣訪問;模型應該是完全獨立與UI的,它絕對不能同視圖這一塊中的對象進行溝通;同時UI對象應該是通用的,它們無法同任何特定的模型進行通信,它們需要控制器來為它們解釋模型;
-
視圖訪問控制器:因為視圖對象是通用的,它們不能對控制器知道得太多;視圖只能以一種”盲“的方式同控制器進行通信,它們不應知道控制器的類;這里需要結構化的通信方式:一種叫做目標動作,控制器在自己身上設置一個目標,它會提供一個動作給視圖,當有人觸發了視圖的特定事件,則發送該動作給控制器;還有更多復雜的情況,譬如視圖發生了will、should、did等事件,這些事件視圖自身沒有足夠的邏輯去處理,需要將這些復雜事件委托給控制器去完成,即委托協議(協議是一種同另一對象進行通信的盲方式);最后是數據源,因為視圖不應該擁有其所顯示的數據,它只在自身開辟出供顯示數據所需要的空間,但它并不關心這些數據究竟是什么;
-
模型訪問控制器:這同樣是不允許的,但有時候模型中的事物會變化,控制器需要知道它,這種通信如何做到呢?這可以通過一種電臺的概念來理解,模型會將自身發生變化的消息廣播出去,任何對其感興趣的對象都可以收到,iOS將這種機制叫做通知(Notification)和鍵值觀察(KVO);
MVC架構之間可以進行組合,通過這種組合實現更大、更復雜的APP;
轉載于:https://www.cnblogs.com/zfan/p/3984576.html
總結
以上是生活随笔為你收集整理的CS193P学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用U盘安装win7系统,遇到“无法定位
- 下一篇: 开发教程网址