CS193P-2013 Lecture 1

MVC

MVC, Model, View, Controller

是一種將應(yīng)用中所有類組織起來的策略

將所有的類分為三塊,分別是模型、視圖和控制器

Model, View, Controller

  • Model

    What your app is(but not how it is displayed)

    完全獨立于 UI

  • View

    controller's minions

    控制器要使用的類,視圖中的元素是通用的

    視圖不允許擁有數(shù)據(jù),模型擁有數(shù)據(jù)

  • Controller

    How your Model presented to the user(UI logic)

    控制 UI 如何工作,非常特定地作用于 UI 工作

通信

  • 控制器 -> 模型

    控制器需要知道模型的一切,需要有同模型完全通信的能力,按照任何方式使用 API

    控制器的作用是將模型呈現(xiàn)給用戶,使用視圖作為其仆從

    控制器需要能夠完全,不受限地訪問模型

  • 控制器 -> 視圖

    通信同樣是不受限的

    當(dāng)有一個屬性從控制器指向視圖,就稱它是一個 outlet,作用是讓視圖和控制器通信

  • 模型 <-> 視圖

    無法通信,模型完全獨立于 UI

    視圖是通用的 UI 對象,不能與任何特定模型通信

    視圖需要控制器來為它解釋模型

  • 視圖 -> 控制器

    1. 通過盲通信(target action 等)
    2. 通過代理
    3. 通過數(shù)據(jù)源
  • 模型 -> 控制器

    不允許,模型對 UI 一無所知

    模型中的事物變化時,控制器需要知道這樣的變化——通過 Notification 機制和鍵值觀察


屬性

屬性是 OBJC 中用來訪問實例變量的方式

屬性實際上就是一個 getter 方法和一個 setter 方法(并不會對性能有太大影響)


每個類有一個頭文件.h 和一個實現(xiàn)文件.m

.h 里的是公共 API

.m 里的是私有 API

  • .h

    @import Foundation
    @interface Card: NSObject //@interface <類名(同文件名)> : <父類>
                              //.h 必須指名父類,且只指名一次
    @property (strong, nonatomic) NSString *contents; 
    //@property 會聲明每一個紙牌實例都需要空間,且在 .h 中自動創(chuàng)建 setter 和 getter 的聲明
    //對象聲明必須使用指針。所有的對象在堆中而不是棧中
    //strong 表示在堆中保持這個這個所指的東西,除非沒有任何一個強指針指向它則釋放(這稱為 ARC),是缺省值
    //weak 表示除了有 strong 的特性以外,當(dāng)它被釋放時這個指針會指向 nil(對 nil 指針發(fā)送消息不會有問題)
    //nonatomic 非原子性,即禁止多線程
    @property (nonatomic, getter=isChosen) BOOL chosen;
    @property (nonatomic, getter=isMathced) BOOL matched;
    //原始屬性不再堆中,不需要指針,所以不用指定 strong 或 weak
    //可以在聲明時修改 Getter 的名字
    - (int)match:(Card *)card;
    //- 表示實例方法,+ 表示類方法
    @end
    //表示接口的結(jié)束,所有的共有 API 都在 @interface 和 @end 之間
    
  • .m

    #import "Card.h"
    
    @interface Card()
      
    @end
    //私有聲明部分 以 @interface <類名>() 開始,@end 結(jié)束
    //主要用于屬性
      
    @implementation Card
    @synthesize contents = _contents
    //@synthesize 與 @property 成對使用,表示使用名為_contents 的實例變量
    //iOS7以后可以不用寫,默認(rèn)生成前綴是下劃線的實例變量和對應(yīng) setter 和 getter
    //@synthesize 會在 .m 中自動生成 setter 和 getter 的實現(xiàn)
    //如果有自己實現(xiàn)的 setter 和 getter ,上面的自動實現(xiàn)會被屏蔽
    - (int)match:(NSArray *)otherCards {
        int score = 0;
        for (Card *card in otherCards) {
            if ([!card.contents isEqualToString:self.contents]) {
              score = 1;
              //==比較的是指針而不是值,要用 isEqualToString
            }
        }
    }
    @end
    //表示私有實現(xiàn)的結(jié)束,所有私有實現(xiàn)都在 @implementation 和 @end 之間
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,578評論 30 472
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,018評論 4 61
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    扶光啟玄閱讀 5,186評論 0 13
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,583評論 0 6
  • 我有一個夢想, 站在高高的山崗, 沒有城市的喧囂, 看人來人往。 我有一個夢想, 站在熟悉的村莊, 聽雞鴨的叫嚷,...
    南宮詩萌閱讀 152評論 1 1

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