国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

斯坦福iOS7公開課1-3筆記及紙牌Demo

2019-11-14 20:29:08
字體:
供稿:網(wǎng)友

1.MVC

    Model:模型

    描述程序是什么,例如數(shù)據(jù)庫操作之類的行文以及紙牌Demo里紙牌玩法都是寫在Model這一層,通過Notification和KVO(后續(xù)文章會(huì)介紹)兩種方式與Controller通訊。

    Controller:控制層

    程序的邏輯在這里組織,Controller負(fù)責(zé)Model與View之間的溝通,因?yàn)镸odel與View老死不相往來。

    當(dāng)用戶在頁面進(jìn)行操作后,Controller收集用戶發(fā)出的交互信息,然后請(qǐng)教Model如何應(yīng)對(duì),Model收到Controller提出的問題,再給出答案(Controller不提出問題,Model永遠(yuǎn)不會(huì)主動(dòng)回答)。Controller收集到Model給出的回應(yīng)之后,再根據(jù)情況去更新UI頁面。

    當(dāng)把UI控件與Controller聯(lián)系起來時(shí),Controller中會(huì)出現(xiàn)對(duì)應(yīng)控件的outlet接口,通過它,Controller可以直接對(duì)UI控件進(jìn)行通訊。

    View:UI頁面

    程序運(yùn)行后,用戶看到的就是這一層,用戶的交互信息可以通過delegate、dataSource和Target-Action三種方式與Controller進(jìn)行通訊。

    

     以紙牌Demo為例,右側(cè)即程序運(yùn)行后的頁面,即View層,

     左側(cè)列表Model中一系列文件為Model層,定義了紙牌游戲的一系列玩法,如何玩。

     CardgameViewController就是Controller層了,收集到頁面點(diǎn)擊的信息,找到Model里的方法,再去更新頁面效果。

    

     MVC的好處就在于代碼分離,不僅使代碼結(jié)構(gòu)更清晰,也方便后續(xù)迭代更新,尤其是Controller中代碼一多,可避免在Controller這一層與UI元素設(shè)置糾纏在一起。

     如圖,紙牌Demo中建立Model層以后,能夠使代碼更簡(jiǎn)潔清晰(注釋掉的為分離Model前使用的部分代碼)。

   

    

2.h文件和.m文件

    

     Objective-c中.h文件主要用來聲明公共接口,包括聲明類及其方法。.m文件則負(fù)責(zé)具體實(shí)現(xiàn),也可以在這定義不想暴露出去的私有接口。

     引入頭文件時(shí)會(huì)看到兩種寫法,引用系統(tǒng)自帶的一般用#import <XX.h>,引用自定義的一般用#import "XX.h",區(qū)別在于""表示從當(dāng)前項(xiàng)目路徑開始尋找文件,如果找不到,則到項(xiàng)目中配置的頭文件路徑去找。<>表示直接到項(xiàng)目配置的頭文件路徑去找。

3.@PRoperty、nonatomic、strong 

     在代碼中會(huì)看到這幾個(gè)關(guān)鍵詞,使用@property聲明變量后,Xcode4.5及之后的版本中編譯器會(huì)自動(dòng)生成setter和getter方法,如果不是特殊需要,可以直接使用下劃線加變量名(“_name”)進(jìn)行賦值取值操作。

     atomic是為了防止多線程操作時(shí)同時(shí)讀取數(shù)據(jù)的一種保護(hù)機(jī)制,會(huì)占用一些資源,一般在單線程中使用nonatomic即可。

     strong、weak代表強(qiáng)弱引用(arc環(huán)境下使用,Xcode5以后默認(rèn)為arc環(huán)境)。

     使用strong申明變量為強(qiáng)引用類型時(shí),意味著變量是對(duì)象的擁有者,除非將該變量(Objective-C中所有變量都是指針)賦值為nil或者指向其他對(duì)象,不然該對(duì)象會(huì)一直存在內(nèi)存中,即對(duì)象只要有至少一個(gè)擁有者(strong變量)時(shí),就不會(huì)被銷毀。

     需要注意的是,Xcode中,不指明strong或weak時(shí),默認(rèn)為strong,但即使是strong,@property中一般也會(huì)指明strong,這是一種約定俗成習(xí)慣,雖然不寫也沒錯(cuò)。

     使用weak則不同,意味著該變量不是對(duì)象的擁有者。比如在ViewController中可以發(fā)現(xiàn)UI控件一般都是weak類型,當(dāng)View這個(gè)擁有者銷毀后,UI控件就沒有擁有者了,自動(dòng)被賦值為nil,即View銷毀后,其所屬的UI控件也不存在了。

    

 

4.iOS7新特性 instancetype 

     課程中建議init方法使用instancetype代替id,當(dāng)返回值與消息接收者類型一致時(shí)就可以用instancetype,能夠讓編譯器自動(dòng)做一些檢查工作,在我們寫代碼編譯階段就能自動(dòng)檢查返回值類型是否合法,但instancetype不能像id一樣作為參數(shù)使用,暫不深入研究,有興趣可以參考

    http://blog.eddie.com.tw/2013/12/16/id-and-instancetype/

   

5.課程中用到的紙牌Demo最終效果

   源碼見附件:http://files.VEVb.com/colinhou/Matchismo.zip

   

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: SHOW| 虎林市| 淮滨县| 和平县| 仁怀市| 兴化市| 江陵县| 南充市| 尖扎县| 黎平县| 玉溪市| 涟水县| 巴中市| 西昌市| 屯门区| 汝城县| 吴江市| 博白县| 怀宁县| 江永县| 嘉荫县| 山丹县| 渝中区| 沾益县| 宁强县| 蕲春县| 东阳市| 卢龙县| 永定县| 安泽县| 阳信县| 高青县| 神木县| 江达县| 黄浦区| 莱西市| 新竹县| 江川县| 嘉黎县| 北安市| 洛阳市|