Object-C中類、對象和方法

一、類和對象

  • 類的定義
    • 類是對某個對象的定義。是某種類型的對象變量和方法的原型。類是從一些具有相同屬性或功能的具體實例,抽象出共有的一些屬性的,自定義抽象數(shù)據(jù)類型。
  • 對象的定義
    • 對象是具有類類型的變量。類和對象是面向?qū)ο缶幊碳夹g(shù)中的最基本的概念。
  • 類和對象的關(guān)系:類是對象的抽象,而對象是類的具體實例。對象是對客觀事物的抽象,類是對對象的抽象。
  • 簡單理解:類好比人類的骨架,對象好比人類的血肉。
  • OC 中的類相當(dāng)于圖紙或框架,用來描述一類事物,要想創(chuàng)建對象必須先有類。
  • OC 利用類來創(chuàng)建對象,對象是類的具體存在,因此面向?qū)ο蠼鉀Q問題因首先考慮需要設(shè)計那些類,再利用類來創(chuàng)建多少個對象。

二、 類的設(shè)計

  • 1.如何設(shè)計一個類
    • 生活中描述事物無非就是事物的 名稱/屬性 和 行為。
      • 示例:車有長、寬,重量和顏色等屬性,有開車、聽廣播的行為
    • OC中類的描述也是如此
      • 屬性:對應(yīng)類中的成員變量。
      • 行為:對應(yīng)類中的成員方法。
  • 2.如何分析一個類
    • 一般名詞都是類(名詞提煉法)
      • 示例:小明像魚塘扔了一塊石頭,砸暈了4條魚
        • 提煉出來的類:小明、石頭、魚
    • 擁有相同(或者相似)屬性(狀態(tài)和特征)和行為(能做什么事)的對象都可以抽象成為一個類
      • 定義行為時的注意點:誰最清楚這個行為,那么該行為就屬于誰

三、類的聲明和實現(xiàn)

  • 1.類的聲明: OC中定義一個類分為聲明和實現(xiàn)

    • 編寫類的聲明:以 @interface 開頭,以 @end 結(jié)束,在 class name對應(yīng)的地方寫上事物的名稱,即類名稱。
    • 類名的首字符必須大寫,OC類聲明中屬性只能寫在 @interface 和 @end 之間的 {} 中。
    • 聲明一個類是在告訴系統(tǒng),這個類中有那些屬性和行為。
    • 在編寫OC類屬性時,建議將所有屬性的名稱前面都加上下劃線: _
    // 默認(rèn)情況下,OC對象中的屬性是不能直接訪問的,
    // 而類名后面的 :NSObject 是為了讓我們的 Iphone 類具備創(chuàng)建對象的能力。
     @interface Iphone : NSObject
    {
        @public //只要讓類中的屬性公開,以后就可以直接通過一個指向結(jié)構(gòu)體的指針來操作對象
        float  _model;
        int _cpu;
        double _size;
        int _color;
    }
    
  • 2.類的實現(xiàn)
    以 @implementation 開頭,以 @end 結(jié)束,在 class 對應(yīng)的地方寫上聲明類的名稱,必須和聲明的類名一模一樣。

    @implementation Iphone
    {
       
    }
    
    • 3.如何通過一個類來創(chuàng)建對象
      • 在OC中想要通過一個類來創(chuàng)建一個對象,必須給類發(fā)送一個消息(類似C語言中調(diào)用方法)。想要發(fā)送消息就必須先寫上 [類名稱/對象名稱 方法名稱];,發(fā)送一個 new 消息可以創(chuàng)建一個對象。
        示例: [Iphone new];
      • 只要通過一個類調(diào)用類的 new 方法,像類發(fā)送一個叫 new 的消息后,系統(tǒng)會做如下事件:
        • 為 Iphone 類創(chuàng)建出來的對象分配存儲空間
        • 初始化 Iphone 類創(chuàng)建出來的對象中的屬性
        • 返回 Iphone 類創(chuàng)建出來的對象對應(yīng)的地址
    • 示例:通過一個 Iphone 類型的指針接收了 Iphone 對象的地址:*Iphone p = [Iphone new];
      • 如果使用一個指針保存了某一個對象的地址,那么就稱這個指針為某個類型的對象
      • 利用 Iphone 類型的指針保存了 Iphone 對象的地址,那么就稱 Iphone 類的指針 p 為 Iphone 的對象。
    • OC中類的本質(zhì)是一個結(jié)構(gòu)體, 所以 p 這個指針其實就是指向了一個結(jié)構(gòu)體
    struct Person
    {
        int age;
        char *name;
    };
    struct Person sp;
    struct Person *sip = &sp;
    (*sip).name = "lee";
    (*sip).age = 30;
    

四、創(chuàng)建一個OC方法

  • 1.事物名稱:iPhone
    • 屬性:顏色,型號,CPU,尺寸 == 成員變量
    • 行為:打電話,發(fā)短信,上網(wǎng),獲取本機信息 == 成員方法
  • 2.編寫類的聲明和實現(xiàn)
    • 類的聲明和實現(xiàn)如上文所示
    • C 語言函數(shù)分為:內(nèi)部函數(shù)和外部函數(shù);OC語言的方法分為: 類方法和對象方法。類方法只能用類名來調(diào)用,類方法用+表示;對象方法只能用對象來調(diào)用,對象方法用-表示。
    • OC中的行為和C語言函數(shù)一樣,都是用來保存一段特定功能的代碼;C中的函數(shù)和OC中的方法都分為聲明和實現(xiàn)
      • 編寫C語言函數(shù)的規(guī)律:1.確定函數(shù)名稱,2.確定形參,3.確定返回值,4.確定返回值類型
      • 編寫OC語言函數(shù)的規(guī)律:1.確定函數(shù)名稱,2.確定形參,3.確定返回值,4.確定返回值類型
    • 聲明一個類


      eg-1.png
  • 3.定義一個OC對象方法和類方法
    • 對象方法

注意點: OC 中的方法,如果沒有形參不需要寫(),而是直接寫一個; , OC中的()有其他特殊用途,他是用來括住數(shù)據(jù)類型的。

 //示例:
 @interface Iphone
  {
      -(void)about;
      //OC 中的方法如果有參數(shù),那么每個參數(shù)的數(shù)據(jù)類型前面必須加上:,并且:也是方法的名稱,signal:
      -(int)signal:(int)nember;
  }
  @end

  @implementation Iphone
   {
      -(void)about()
      {
           NSLog("打印本機信息!");
      }
   }
   @end
  • 類方法
    • 如果不想每次使用方法都需要創(chuàng)建對象開辟存儲空間,并且如果該方法中沒有使用到屬性(成員變量),那么就可以把這個方法定義為類方法
    • 定義類方法的寫法和對象方法一樣,只需要將前面-換成+即可
    • 如果聲明的是對象方法,就必須實現(xiàn)對象方法;如果聲明的是類方法,就必須實現(xiàn)類方法。
 //示例:
 @interface Iphone
  {
      +(int)sumWithValue:(int)value1 :(int)value2;
  }
  @end

  @implementation Iphone
   {
      +(int)sumWithValue:(int)value1 :(int)value2
      {
          return value1 + value2;
      }
   }
   @end
  • 類方法和對象方法的區(qū)別
    • 0.對象方法以-開頭,類方法以+開頭
    • 1.對象方法必須對象調(diào)用,類方法必須類調(diào)用
    • 2.對象方法中可以直接訪問屬性(成員變量),類方法中不可以直接訪問屬性(成員變量)
    • 3.類方法的優(yōu)點,調(diào)用類方法的效率會比調(diào)用對象方法高
    • 4.類方法和對象方法可以進行互相調(diào)用

      4.1 對象方法中可以直接調(diào)用類方法
      4.2 可以在類方法中間接調(diào)用對象方法(企業(yè)開發(fā)中不建議這樣用)
      4.3 類方法中可以直接調(diào)用其他類方法
      4.4 對象方法中可以直接調(diào)用對象方法

  • 類方法的應(yīng)用場景
  • 如果方法中沒有使用到屬性(成員變量),那么能用類方法就用類方法,類方法的執(zhí)行效率比對象方法高
  • 類方法一般用于定義工具方法:字符創(chuàng)的查找,文件操作,數(shù)據(jù)庫的操作
最后編輯于
?著作權(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)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 26,324評論 19 129
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,624評論 30 472
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評論 0 9
  • 簡書,我想把這兒作為寧靜的一片小天地。我希望摘抄一些美麗的句子,擁有美麗的生活和心情。 讓自己活在希望里,然而活得...
    js92閱讀 288評論 0 0

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