OC中instancetype與id的區(qū)別
區(qū)別1:
在ARC(Auto Reference Count)環(huán)境下:
instancetype用來(lái)在編譯期確定實(shí)例的類型,而使用id的話,編譯器不檢查類型, 運(yùn)行時(shí)檢查類型.
在MRC(Manual Reference Count)環(huán)境下:
instancetype和id一樣,不做具體類型檢查
區(qū)別2:
id可以作為方法的參數(shù),但instancetype不可以
instancetype只適用于初始化方法和便利構(gòu)造器的返回值類型
請(qǐng)簡(jiǎn)述MVVM娶牌,以及相對(duì)于MVC的優(yōu)點(diǎn)哲思?
MVC
MVC是一種架構(gòu)模式甩十,M表示Model警医,V表示視圖View乾闰,C表示控制器Controller
Model負(fù)責(zé)存儲(chǔ)陨簇、定義志笼、操作數(shù)據(jù);
View用來(lái)展示書(shū)給用戶痊土,和用戶進(jìn)行操作交互肄扎;
Controller是Model和View的協(xié)調(diào)者墨林,Controller把Model中的數(shù)據(jù)拿過(guò)來(lái)給View用赁酝。Controller可以直接與Model和View進(jìn)行通信,而View不能和Controller直接通信旭等。View與Controller通信需要利用代理協(xié)議的方式酌呆,當(dāng)有數(shù)據(jù)更新時(shí),Model也要與Controller進(jìn)行通信搔耕,這個(gè)時(shí)候就要用Notification和KVO隙袁,這個(gè)方式就像一個(gè)廣播一樣痰娱,Model發(fā)信號(hào),Controller設(shè)置監(jiān)聽(tīng)接受信號(hào)菩收,當(dāng)有數(shù)據(jù)更新時(shí)就發(fā)信號(hào)給Controller梨睁,Model和View不能直接進(jìn)行通信,這樣會(huì)違背MVC設(shè)計(jì)模式娜饵。
MVVM
ViewModel層坡贺,就是View和Model層的粘合劑,他是一個(gè)放置用戶輸入驗(yàn)證邏輯箱舞,視圖顯示邏輯遍坟,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他各種各樣的代碼的極好的地方。說(shuō)白了晴股,就是把原來(lái)ViewController層的業(yè)務(wù)邏輯和頁(yè)面邏輯等剝離出來(lái)放到ViewModel層愿伴。
View層电湘,就是ViewController層,他的任務(wù)就是從ViewModel層獲取數(shù)據(jù)胡桨,然后顯示官帘。
事件的傳遞和響應(yīng)的區(qū)別:
事件的傳遞是從上到下(父控件到子控件)昧谊,事件的響應(yīng)是從下到上(順著響應(yīng)者鏈條向上傳遞:子控件到父控件。