斯坦福大學(xué)iOS公開(kāi)課學(xué)習(xí)筆記(1)-iOS的MVC框架


title: 斯坦福大學(xué)iOS公開(kāi)課學(xué)習(xí)筆記(1)---iOS的MVC框架
date: 2017-04-26 15:34:44
tags:


還記得大二決心要學(xué)習(xí)iOS開(kāi)發(fā)的時(shí)候曾經(jīng)看過(guò)斯坦福大學(xué)公開(kāi)課中白胡子老頭的經(jīng)典視頻疫萤。不過(guò)因?yàn)楫?dāng)時(shí)對(duì)iOS還不是非常了解,導(dǎo)致看著看著就扔下了「疑欤現(xiàn)在畢業(yè)也有將近一年的時(shí)間了扯饶,決定重新刷一遍這個(gè)經(jīng)典的公開(kāi)課視頻,并且寫(xiě)下學(xué)習(xí)筆記放到這里池颈。同時(shí)在我的博客里也會(huì)慢慢更新新的筆記尾序。

簡(jiǎn)介

MVC設(shè)計(jì)模式,全名為 Model-View-Controller躯砰,是模型(Model)-視圖(View)-控制器(Controller)的縮寫(xiě)每币。它將一個(gè)程序分為了三個(gè)陣營(yíng)。圖片來(lái)自于課件

MVC.png

基本概念

  • 模型(Model):負(fù)責(zé)封裝琢歇、存儲(chǔ)和處理數(shù)據(jù)兰怠。
  • 視圖(View):負(fù)責(zé)展示數(shù)據(jù),監(jiān)聽(tīng)用戶的動(dòng)作李茫。
  • 控制器(Controller):負(fù)責(zé)處理邏輯業(yè)務(wù)揭保,響應(yīng)事件,加工數(shù)據(jù)魄宏。

通信

控制器(Controller)與視圖(View)

控制器(Controller) -> 視圖(View):完全控制

控制器可以完全知道視圖的所有行為秸侣,具有完全控制權(quán)。

這里提到了 outlet,outlet(輸出口)是一種特殊的OC屬性味榛,用關(guān)鍵字IBOutlet聲明方篮,輸出口是在控制器類的頭文件中聲明

@property  (nonatomic,retain)    IBOutlet UIButton    *mybutton;

上邊代碼中就聲明了一個(gè)mybutton的輸出口,可以設(shè)置它指向IB中的任何一個(gè)button励负,通過(guò)mybutton這個(gè)對(duì)象,我們就可以獲得到該button的相關(guān)屬性匕得。

視圖(View) -> 控制器(Controller):盲的通信

因?yàn)閂iew是通用的继榆,所以他不知道調(diào)用他的Controller,所以他只能通過(guò)盲通信的方式與Controller通信汁掠。

  • target 通信

    控制器本身有一個(gè)目標(biāo)方法(target)略吨,然后將這個(gè)目標(biāo)給視圖的行為方法(action),當(dāng)視圖中觸發(fā)這個(gè)行為時(shí),視圖會(huì)發(fā)送消息給控制器的目標(biāo)告訴控制器有人對(duì)他進(jìn)行了操作考阱。比如按鈕的點(diǎn)擊事件翠忠、滑動(dòng)條的滑動(dòng)事件。

    UIButton *myBtn = [[UIButton alloc] init];
    [myBtn addTarget:self action:@selector(myBtnClicked) forControlEvents:UIControlEventTouchUpInside];
- (void)myBtnClicked
{
    NSLog(@"myBtn clicked");
}

比如上邊兩段代碼就表示了一個(gè)按鈕設(shè)置target為self乞榨,并且設(shè)置行為為myBtnClicked,所以當(dāng)用戶點(diǎn)擊了這個(gè)按鈕時(shí)秽之,我們就會(huì)打印出 myBtn clicked 。

  • 代理(Delegate)與數(shù)據(jù)源(DataSource)通訊

    代理(Delegate)吃既,視圖向控制器詢問(wèn)一些自己無(wú)法決定的事情的時(shí)候考榨,或者讓控制器幫忙來(lái)完成一些他自己無(wú)法完成的事情的時(shí)候會(huì)用到代理方法。比如通過(guò)一些關(guān)鍵字(will鹦倚、should河质、did)來(lái)描述視圖當(dāng)前的情況,控制器就可以通過(guò)情況進(jìn)行判斷震叙。比如UITableView中就有許多代理方法來(lái)告訴控制器視圖當(dāng)前的狀態(tài)掀鹅。

    數(shù)據(jù)源(DataSource),視圖不該持有他的數(shù)據(jù)媒楼,如果視圖持有了數(shù)據(jù)就違背了他的通用性乐尊。數(shù)據(jù)應(yīng)該屬于在模型中,他與UI無(wú)關(guān)匣砖,所以控制器必須有方法告訴視圖他有多少數(shù)據(jù)科吭。數(shù)據(jù)源是一種特殊的代理。還是拿UITableView舉例子猴鲫,他就有數(shù)據(jù)源方法來(lái)獲取數(shù)據(jù)对人。

控制器(Controller)與 模型(Model)

控制器(Controller) -> 模型(Model):完全控制

控制器可以完成控制模型,可以知道模型中的一切拂共。

模型(Model) -> 控制器(Controller): 廣播通知

通常情況下牺弄,模型是不可以和控制器通信的,不過(guò)當(dāng)模型中的數(shù)據(jù)發(fā)生了改變宜狐,他就需要告知控制器势告,我的數(shù)據(jù)變了蛇捌。模型可以像電臺(tái)一樣發(fā)布廣播,控制器中可以接收到模型發(fā)出的信號(hào)并進(jìn)行處理咱台。

  • 通知(Notification)

    一般來(lái)說(shuō)络拌,控制器中會(huì)注冊(cè)成為監(jiān)聽(tīng)者

    - (void)addObserver:(id)observer selector:(SEL)aSelector name:
    

當(dāng)模型中的值發(fā)生改變時(shí),模型會(huì)發(fā)出通知

- (void)postNotification:(NSNotification *)notification;

- (void)postNotificationName:(NSString *)aName object:(id)anObject;

成為監(jiān)聽(tīng)者的控制器就會(huì)接受到來(lái)自模型的信號(hào)回溺,做出相應(yīng)的改變春贸。

  • KVO(鍵值對(duì)觀察)

    與通知一樣,在控制器中注冊(cè)成為觀察者遗遵,實(shí)現(xiàn)回調(diào)方法萍恕,在模型發(fā)生改變的時(shí)候可以通過(guò)激活回調(diào)方法讓控制器做出一些動(dòng)作。

模型(Model)與視圖(View):不能

很明顯车要,最開(kāi)始的圖片中允粤,模型和視圖中間是雙黃線。模型是完全獨(dú)立于UI的翼岁,所以模型和視圖是完全不可以通信的类垫。

多個(gè)MVC結(jié)構(gòu)同時(shí)作用

多個(gè)MVC結(jié)構(gòu)同時(shí)作用

一定不要寫(xiě)成的樣子

不要寫(xiě)成的樣子

Objective-C

第一節(jié)課中還講了一些OC中的屬性和知識(shí)點(diǎn)。

類文件類型

  • .h文件:公開(kāi)API琅坡,其他類可以調(diào)用阔挠,告訴其他類我能做什么 what I can do
  • .m文件:私有API,其他類不可用脑蠕,實(shí)現(xiàn).h文件中的方法how to do

屬性

  • strong:在堆中保持所指向的東西购撼,只要有一個(gè)強(qiáng)指針指向就會(huì)存在,否則就會(huì)釋放谴仙。
  • weak:如果沒(méi)有強(qiáng)指針指向的話迂求,會(huì)被設(shè)置成nil指針。
  • nonatomic:非原子性晃跺,保證線程安全揩局,不能讓兩個(gè)線程同時(shí)設(shè)置該屬性。

結(jié)束

第一節(jié)課講的東西比較基礎(chǔ)掀虎,但是現(xiàn)在回來(lái)再看會(huì)發(fā)現(xiàn)還是會(huì)學(xué)到一些新的知識(shí)凌盯。這節(jié)課重點(diǎn)介紹了MVC架構(gòu),合理的使用MVC可以降低類之間的耦合性烹玉,提高代碼質(zhì)量驰怎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市二打,隨后出現(xiàn)的幾起案子县忌,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症杏,死亡現(xiàn)場(chǎng)離奇詭異装获,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)厉颤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)穴豫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逼友,你說(shuō)我怎么就攤上這事绩郎。” “怎么了翁逞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)溉仑。 經(jīng)常有香客問(wèn)我挖函,道長(zhǎng),這世上最難降的妖魔是什么浊竟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任怨喘,我火速辦了婚禮,結(jié)果婚禮上振定,老公的妹妹穿的比我還像新娘必怜。我一直安慰自己,他們只是感情好后频,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布梳庆。 她就那樣靜靜地躺著,像睡著了一般卑惜。 火紅的嫁衣襯著肌膚如雪膏执。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天露久,我揣著相機(jī)與錄音更米,去河邊找鬼。 笑死毫痕,一個(gè)胖子當(dāng)著我的面吹牛征峦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播消请,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栏笆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了臊泰?” 一聲冷哼從身側(cè)響起竖伯,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涌攻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年陨倡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辨泳。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嵌施,到底是詐尸還是另有隱情,我是刑警寧澤莽鸭,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布吗伤,位于F島的核電站,受9級(jí)特大地震影響硫眨,放射性物質(zhì)發(fā)生泄漏足淆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一礁阁、第九天 我趴在偏房一處隱蔽的房頂上張望巧号。 院中可真熱鬧,春花似錦姥闭、人聲如沸丹鸿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)靠欢。三九已至,卻和暖如春铜跑,著一層夾襖步出監(jiān)牢的瞬間掺涛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工疼进, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薪缆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓伞广,卻偏偏與公主長(zhǎng)得像拣帽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚼锄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容