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


1.MVC

    Model:模型

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

    Controller:控制層

    程序的邏輯在這里組織,Controller負責Model與View之間的溝通,因為Model與View老死不相往來。

    當用戶在頁面進行操作后,Controller收集用戶發出的交互信息,然后請教Model如何應對,Model收到Controller提出的問題,再給出答案(Controller不提出問題,Model永遠不會主動回答)。Controller收集到Model給出的回應之后,再根據情況去更新UI頁面。

    當把UI控件與Controller聯系起來時,Controller中會出現對應控件的outlet接口,通過它,Controller可以直接對UI控件進行通訊。

    View:UI頁面

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

    

     以紙牌Demo為例,右側即程序運行后的頁面,即View層,

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

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

    

     MVC的好處就在於代碼分離,不僅使代碼結構更清晰,也方便后續迭代更新,尤其是Controller中代碼一多,可避免在Controller這一層與UI元素設置糾纏在一起。

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

   

    

2.h文件和.m文件

    

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

     引入頭文件時會看到兩種寫法,引用系統自帶的一般用#import <XX.h>,引用自定義的一般用#import "XX.h",區別在於""表示從當前項目路徑開始尋找文件,如果找不到,則到項目中配置的頭文件路徑去找。<>表示直接到項目配置的頭文件路徑去找。

3.@property、nonatomic、strong 

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

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

     strong、weak代表強弱引用(arc環境下使用,Xcode5以后默認為arc環境)。

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

     需要注意的是,Xcode中,不指明strong或weak時,默認為strong,但即使是strong,@property中一般也會指明strong,這是一種約定俗成習慣,雖然不寫也沒錯。

     使用weak則不同,意味着該變量不是對象的擁有者。比如在ViewController中可以發現UI控件一般都是weak類型,當View這個擁有者銷毀后,UI控件就沒有擁有者了,自動被賦值為nil,即View銷毀后,其所屬的UI控件也不存在了。

    

 

4.iOS7新特性 instancetype 

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

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

   

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

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

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM