設(shè)計原則
1、單一職責(zé)原則
????????CALayer:動畫和視圖的顯示。
????????UIView:只負(fù)責(zé)事件傳遞危尿、事件響應(yīng)寿弱。
2、開閉原則
????????對修改關(guān)閉嚷硫,對擴(kuò)展開放检访。 要考慮到后續(xù)的擴(kuò)展性,而不是在原有的基礎(chǔ)上來回修改仔掸。
3脆贵、接口隔離原則
????????使用多個專門的協(xié)議、而不是一個龐大臃腫的協(xié)議起暮。
????????UITableviewDelegate
????????UITableViewDataSource
4卖氨、依賴倒置原則
????????抽象不應(yīng)該依賴于具體實現(xiàn)、具體實現(xiàn)可以依賴于抽象鞋怀。 調(diào)用接口感覺不到內(nèi)部是如何操作的双泪。
5、里氏替換原則
????????父類可以被子類無縫替換密似,且原有的功能不受任何影響焙矛。
6、迪米特法則
????????一個對象應(yīng)當(dāng)對其他對象盡可能少的了解残腌,實現(xiàn)高聚合村斟、低耦合贫导。
了解哪些設(shè)計模式、架構(gòu)
設(shè)計模式是一種編碼經(jīng)驗蟆盹,就是用比較成熟的邏輯去處理某一種類型的事情孩灯。
1、MVC模式:Model View Control逾滥,把模型 視圖 控制器 層進(jìn)行解耦合編寫峰档。
2、MVVM模式:Model View ViewModel 把模型 視圖 業(yè)務(wù)邏輯 層進(jìn)行解耦和編寫寨昙。
3讥巡、單例模式:通過static關(guān)鍵詞,聲明全局變量舔哪。在整個進(jìn)程運行期間只會被賦值一次欢顷。
4、觀察者模式:KVO是典型的通知模式捉蚤,觀察某個屬性的狀態(tài)抬驴,狀態(tài)發(fā)生變化時通知觀察者。
5缆巧、委托模式:代理+協(xié)議的組合布持。實現(xiàn)1對1的反向傳值操作。?
6陕悬、工廠模式:通過一個類方法鳖链,批量的根據(jù)已有模板生產(chǎn)對象。
MVC墩莫、MVVM芙委、MVP
MVC:Model - View - Controller。View與Model直接交互狂秦,導(dǎo)致View和Model之間的耦合比較大
MVP:Model - View - Presenter灌侣。是MVC的變種,使用Presenter代替了Controller裂问,而且改變了數(shù)據(jù)留向侧啼。View和Model之間不再直接進(jìn)行交互,而是通過Presenter來進(jìn)行的堪簿。Presenter同時持有View和Model痊乾。
? ? ? ? 優(yōu)點:整體框架分層清晰,降低了耦合度椭更。
? ? ? ? 缺點:需要加入Presenter來作為協(xié)調(diào)Model和View的橋梁哪审,同時也導(dǎo)致了Presenter的臃腫,不利于維護(hù)虑瀑。
MVVM:Model - View - ViewModel湿滓。其實是對MVP的一種改進(jìn)滴须,將Presenter替換成ViewModel,并通過雙向數(shù)據(jù)綁定來實現(xiàn)視圖和數(shù)據(jù)的交互叽奥。
? ? ? ? 優(yōu)點:使其數(shù)據(jù)流向更加清晰扔水。
? ? ? ? 缺點:沒有統(tǒng)一實現(xiàn)方式。
MVVM如何實現(xiàn)綁定
用 MVVM 實現(xiàn)一個業(yè)務(wù)朝氓。VC 是入口魔市,VC1 顯示 “省” 的列表,VC2 顯示省關(guān)聯(lián)的 “市”的列表赵哲,VC3 顯示市關(guān)聯(lián)的 “縣” 的列表嘹狞。VC 到 VC1,VC1到 VC2誓竿,VC2 到 VC3,VC3再跳轉(zhuǎn)到 VC谈截。相關(guān)點在于如何設(shè)計 ViewModel 和 Model 筷屡,以及 VC3 到 VC
Block,NSNotification簸喂,delegate毙死,Observer比較
代理是一種回調(diào)機(jī)制,且是一對一的關(guān)系喻鳄,通知是一對多的關(guān)系扼倘,一個對向所有的觀察者提供變更通知;
效率:Delegate比NSNOtification高除呵;
Delegate和Block一般是一對一的通信再菊;
Delegate需要定義協(xié)議方法,代理對象實現(xiàn)協(xié)議方法颜曾,并且需要建立代理關(guān)系才可以實現(xiàn)通信纠拔;
Block:Block更加簡潔,不需要定義繁瑣的協(xié)議方法泛豪,但通信事件比較多的話稠诲,建議使用Delegate;
iOS SDK里面有哪些設(shè)計模式的實踐诡曙?
單例:UIApplication
觀察者:KVO
類簇:NSNumber
裝飾者模式:分類
命令模式:NSInvocation
享元模式:UITableViewCell
為什么需要組件化臀叙?