iOS開發筆記系列-基礎3(多態、動態類型和動態綁定),ios多態

來源:互聯網
上載者:User

iOS開發筆記系列-基礎3(多態、動態類型和動態綁定),ios多態

多態:相同的名稱,不同的類

  使不同的類共用相同方法名稱的能力成為多態。它讓你可以開發一組類,這組類中的每一個類都能響應相同的方法名。每個類的定義都封裝了響應特定方法所需要的代碼,這使得它獨立於其他的類定義。這是因為Objective-C的運行時系統在執行方法時知道訊息的接收者是哪個類的對象,它總是攜帶有關“一個對象屬於哪個類”這樣的資訊,該資訊能使系統在運行時做出決定,而不是在編譯時間。

 

動態綁定和id類型

  id資料類型是一種通用的物件類型,可以用來儲存屬於任何類的對象。當使用id類型的時候,程式的一些測試被從編譯時間延遲到了運行時進行,因為在編譯時間系統還無法確定這個資料類型究竟是什麼類型的。

  如果使用動態類型來調用一個方法,需要注意一下規則:如果在多個類中實現名稱相同的方法,那麼每個方法都必須符合各個參數的類型和傳回值類型,這樣編譯器才能為訊息運算式產生正確的代碼。

  Objective-C中的類都繼承自NSObject類,而這個類支援一些方法,可以用來避免錯誤或在程式運行時檢查程式的完整性,如下:

方法 問題或行為
-(BOOL) isKindOfClass: class-object 對象是不是class-object或其子類的成員
-(BOOL) isMemberOfClass: class-object 對象是不是class-object的成員
-(BOOL) respondsToSelector: Selector 對象是否能夠響應selector所指定的方法
-(BOOL) instancesRespondToSelector: Selector 指定的類執行個體能否響應selector
-(BOOL) isSubclassOfClass: class-object 對象是否是指定類的子類
-(BOOL) performSelector: Selector 應用selector指定的方法
-(BOOL) performSelector: Selector withObject: object 應用selector指定的方法,傳遞參數object
-(BOOL) performSelector: Selector withObject: object1 withObject: object2 應用selector指定的方法,傳遞參數object1和object2

 

  

 

 

 

 

 

 

  這樣在id類型對象上調用某方法之前,就可以先進行一些判斷,來阻止可能產生的錯誤和崩潰。

  此外,也可以採用其他策略如使用 forwardInvocation: 方法將訊息轉寄給其他對象處理。

  在實際開發中也可以通過協議來對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.