iOS面試---常用架構(gòu)簡(jiǎn)介

  • 為什么說Objective-c是一門動(dòng)態(tài)的語言?

1.動(dòng)態(tài)類型:
即運(yùn)行時(shí)再?zèng)Q定對(duì)象的類型。簡(jiǎn)單說就是id類型,任何對(duì)象都可以被id指針?biāo)?,只有在運(yùn)行時(shí) 才能決定是什么類型。像內(nèi)置的明確的基本類型都屬于靜態(tài)類型(int、NSString等)。靜態(tài)類型在編 譯的時(shí)候就能被識(shí)別出來。所以,若程序發(fā)生了類型不對(duì)應(yīng),編譯器就會(huì)發(fā)出警告。而動(dòng)態(tài)類型就編譯器編譯的時(shí)候是不能被識(shí)別的,要等到運(yùn)行時(shí)(run time),即程序運(yùn)行的時(shí)候才會(huì)根據(jù)語境來識(shí)別。所以這里面就有兩個(gè)概念要分清:編譯時(shí)跟運(yùn)行時(shí)。

2.動(dòng)態(tài)綁定:
基于動(dòng)態(tài)類型,在某個(gè)實(shí)例對(duì)象被確定后,其類型便被確定了。該對(duì)象對(duì)應(yīng)的屬性和響應(yīng)的消息也被完全確定,這就是動(dòng)態(tài)綁定。比如我們一般向一個(gè)NSObject對(duì)象發(fā)送-respondsToSelector:或者 -instancesRespondToSelector:等來確定對(duì)象是否可以對(duì)某個(gè)SEL做出響應(yīng),而在OC消息轉(zhuǎn)發(fā)機(jī)制被觸發(fā)之前,對(duì)應(yīng)的類 的+resolveClassMethod:和+resolveInstanceMethod:將會(huì)被調(diào)用,在此時(shí)有機(jī)會(huì)動(dòng)態(tài)地向類或者實(shí)例添加新的方 法,也即類的實(shí)現(xiàn)是可以動(dòng)態(tài)綁定的;isKindOfClass也是一樣的道理。

3.動(dòng)態(tài)加載:
所謂動(dòng)態(tài)加載就是我們做開發(fā)的時(shí)候icon圖片的時(shí)候在Retina設(shè)備上要多添加一個(gè)張@2x的圖片,當(dāng)設(shè)備更換的時(shí)候,圖片也會(huì)自動(dòng)的替換。

  • 講一下MVC和MVVM以及MVP

MVC全名是Model View Controller

  • 數(shù)據(jù)關(guān)系
    1、View 接受用戶交互請(qǐng)求
    2、View 將請(qǐng)求轉(zhuǎn)交給Controller
    3、Controller 操作Model進(jìn)行數(shù)據(jù)更新
    4、數(shù)據(jù)更新之后,Model通知View更新數(shù)據(jù)變化
    5、View 更新變化數(shù)據(jù)
  • 方式
    所有方式都是單向通信
  • 結(jié)構(gòu)實(shí)現(xiàn)
    1、View :使用 Composite模式 (組合模式)
    2、View和Controller:使用 Strategy模式(策略模式 )
    3、Model和 View:使用 Observer模式同步信息
  • 使用
    MVC中的View是可以直接訪問Model的!從而,View里會(huì)包含Model信息,不可避免的還要包括一些業(yè)務(wù)邏輯。在MVC模型里,更關(guān)注的Model的不變,而同時(shí)有多個(gè)對(duì)Model的不同顯示,及View。所以,在MVC模型里,Model不依賴于View,但是 View是依賴于Model的。不僅如此,因?yàn)橛幸恍I(yè)務(wù)邏輯在View里實(shí)現(xiàn)了,導(dǎo)致要更改View也是比較困難的,至少那些業(yè)務(wù)邏輯是無法重用的。

MVP的全稱為Model-View-Presenter,Model提供數(shù)據(jù),View負(fù)責(zé)顯示,Controller/Presenter負(fù)責(zé)邏輯的處理。

  • MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會(huì)直接從Model中讀取數(shù)據(jù)而不是通過 Controller。
  • 數(shù)據(jù)關(guān)系
    1、View 接收用戶交互請(qǐng)求
    2、View 將請(qǐng)求轉(zhuǎn)交給 Presenter
    3、Presenter 操作Model進(jìn)行數(shù)據(jù)更新
    4、Model 通知Presenter數(shù)據(jù)發(fā)生變化
    5、Presenter 更新View數(shù)據(jù)
  • MVP的優(yōu)勢(shì)
    Model與View完全分離,修改互不影響
    更高效地使用,因?yàn)樗械倪壿嫿换ザ及l(fā)生在一個(gè)地方—Presenter內(nèi)部
    一個(gè)Preseter可用于多個(gè)View,而不需要改變Presenter的邏輯(因?yàn)閂iew的變化總是比Model的變化頻繁)。
    更便于測(cè)試。把邏輯放在Presenter中,就可以脫離用戶接口來測(cè)試邏輯(單元測(cè)試)
  • 方式
    各部分之間都是雙向通信
  • 結(jié)構(gòu)實(shí)現(xiàn)
    1、View :使用 Composite模式
    2、View和Presenter:使用 Mediator模式
    3、Model和Presenter:使用 Command模式同步信息
  • MVC和MVP區(qū)別
    MVP與MVC最大的一個(gè)區(qū)別就是:Model與View層之間倒底該不該通信(甚至雙向通信)

MVVM是Model-View-ViewModel的簡(jiǎn)寫。

  • 數(shù)據(jù)關(guān)系
    1、View 接收用戶交互請(qǐng)求
    2、View 將請(qǐng)求轉(zhuǎn)交給ViewModel
    4、ViewModel 操作Model數(shù)據(jù)更新
    5、Model 更新完數(shù)據(jù),通知ViewModel數(shù)據(jù)發(fā)生變化
    6、ViewModel 更新View數(shù)據(jù)
  • 方式
    雙向綁定。View/Model的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。
  • 使用
    可以兼容你當(dāng)下使用的 MVC/MVP 框架。
    增加你的應(yīng)用的可測(cè)試性。
    配合一個(gè)綁定機(jī)制效果最好。
  • MVVM優(yōu)點(diǎn)
    MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model),有幾大優(yōu)點(diǎn):
  1. 低耦合。View可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的”View”上,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變。
  2. 可重用性。你可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯。
  3. 獨(dú)立開發(fā)。開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設(shè)計(jì)人員可以專注于頁面設(shè)計(jì),生成xml代碼。
  4. 可測(cè)試。界面素來是比較難于測(cè)試的,而現(xiàn)在測(cè)試可以針對(duì)ViewModel來寫。

-參考文章:
【框架篇】mvc、mvp、mvvm使用關(guān)系總結(jié)
為什么說OC是動(dòng)態(tài)語言

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容