1>iOS系統(tǒng)分層
? 1.Core OS
? 2.Core Service
? 3.Media
? 4.Cocoa Touch
2>MVC架構(gòu)
MVC,模型(Model)、視圖(View)、控制器(Controller),也就是一種將應(yīng)用中的所有類組織起來的策略;我們將所有的類歸為三種類型:模型、視圖、控制器;如何知道哪個(gè)類屬于哪一類型呢?
MVC之間是如何通信的呢?
控制器訪問模型:控制器訪問模型能夠完全地、不受限地訪問,能夠按照任何方式使用模型的公共API;
控制器訪問視圖:同樣是完全不受限地,因?yàn)榭刂破餍枰S意使喚自己的”仆從“,并且我們定義這樣一個(gè)屬性:Outlet,當(dāng)控制器指向視圖時(shí),我們將該指針稱為Outlet;
模型與視圖相互訪問:MVC建議我們避免這樣訪問;模型應(yīng)該是完全獨(dú)立與UI的,它絕對(duì)不能同視圖這一塊中的對(duì)象進(jìn)行溝通;同時(shí)UI對(duì)象應(yīng)該是通用的,它們無法同任何特定的模型進(jìn)行通信,它們需要控制器來為它們解釋模型;
視圖訪問控制器:因?yàn)橐晥D對(duì)象是通用的,它們不能對(duì)控制器知道得太多;視圖只能以一種”盲“的方式同控制器進(jìn)行通信,它們不應(yīng)知道控制器的類;這里需要結(jié)構(gòu)化的通信方式:一種叫做目標(biāo)動(dòng)作,控制器在自己身上設(shè)置一個(gè)目標(biāo),它會(huì)提供一個(gè)動(dòng)作給視圖,當(dāng)有人觸發(fā)了視圖的特定事件,則發(fā)送該動(dòng)作給控制器;還有更多復(fù)雜的情況,譬如視圖發(fā)生了will、should、did等事件,這些事件視圖自身沒有足夠的邏輯去處理,需要將這些復(fù)雜事件委托給控制器去完成,即委托協(xié)議(協(xié)議是一種同另一對(duì)象進(jìn)行通信的盲方式);最后是數(shù)據(jù)源,因?yàn)橐晥D不應(yīng)該擁有其所顯示的數(shù)據(jù),它只在自身開辟出供顯示數(shù)據(jù)所需要的空間,但它并不關(guān)心這些數(shù)據(jù)究竟是什么;
模型訪問控制器:這同樣是不允許的,但有時(shí)候模型中的事物會(huì)變化,控制器需要知道它,這種通信如何做到呢?這可以通過一種電臺(tái)的概念來理解,模型會(huì)將自身發(fā)生變化的消息廣播出去,任何對(duì)其感興趣的對(duì)象都可以收到,iOS將這種機(jī)制叫做通知(Notification)和鍵值觀察(KVO);
MVC架構(gòu)之間可以進(jìn)行組合,通過這種組合實(shí)現(xiàn)更大、更復(fù)雜的APP;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注