IOs開發Objective-C基礎之──多態

來源:互聯網
上載者:User

      Objective-C語言是物件導向的進階程式設計語言,因此,它具有物件導向編程所具有的一些特性,即:封裝性、繼承性和多態性。

今天介紹一下Objective-C中的多態性。

 

      一、什麼是多態

 

      多態:不同對象以自己的方式響應相同的訊息的能力叫做多態。

      由於每個類都屬於該類的名字空間,這使得多態稱為可能。類定義中的名字和類定義外的名字並不會衝突。類的執行個體變數和類方法有如下特點:

  • 和C語言中結構體中的資料成員一樣,類的執行個體變數也位於該類專屬的名字空間。

  • 類方法也同樣位於該類專屬的名字空間。與C語言中的方法名不同,類的方法名並不是一個全域符號。一個類中的方法名不會和其他類中同樣的方法名衝突。兩個完全不同的類可以實現同一個方法。

      方法名是對象介面的一部分。對象收到的訊息的名字就是調用的方法的名字。因為不同的對象可以有同名的方法,所以對象必須能理解訊息的含義。同樣的訊息發給不同的對象,導致的操作並不相同。

      多態的主要好處就是簡化了編程介面。它容許在類和類之間重用一些習慣性的命名,而不用為每一個新加的函數命名一個新名字。這樣,編程介面就是一些抽象的行為的集合,從而和實現介面的類的區分開來。

      Objective-C支援方法名的多態,但不支援參數和操作符的多態。

 

     二、在Objective-C中如何?多態

 

     在Objective-C中是通過一個叫做selector的選取器實現的。在Objective-C中,selector有兩個意思, 當用在給對象的源碼訊息時,用來指方法的名字。它也指那個在源碼編譯後代替方法名的唯一的標識符。 編譯後的選取器的類型是SEL有同樣名字的方法、也有同樣的選取器。你可以使用選取器來調用一個對象的方法。

 

     選取器有以下特點:

     * 所有同名的方法擁有同樣的選取器

     * 所有的選取器都是不一樣的

 

     (1) SEL和@selector

          選取器的類型是 SEL。@selector指示符用來引用選取器,傳回型別是SEL。

          例如:

         SEL responseSEL;      

                responseSEL = @selector(loadDataForTableView:);     

         可以通過字串來得到選取器,例如:

               responseSEL = NSSelectorFromString(@"loadDataForTableView:");

         也可以通過反向轉換,得到方法名,例如:

               NSString  *methodName = NSStringFromSelector(responseSEL);

 

     (2) 方法和選取器

 

         選取器確定的是方法名,而不是方法實現。這是多態性和動態綁定的基礎,它使得向不同類對象發送相同的訊息成為現實;否則,發送     訊息和標準C中調用方法就沒有區別,也就不可能支援多態性和動態綁定。

         另外,同一個類的同名類方法和執行個體方法擁有相同的選取器。

     (3) 方法傳回值和@參數類型

 

         訊息機制通過選取器找到方法的傳回值類型和參數類型,因此,動態綁定(例:向id定義的對象發送訊息)需要同名方法的實現擁有相     同傳回值類型和相同的參數類型;否則,運行時可能出現找不到對應方法的錯誤。

         有一個例外,雖然同名灶方法和執行個體方法擁有相同的選取器,但是它們可以有不同的參數類型和傳回值類型。

       

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.