iOS開發筆記 Objective C實現多繼承

2021-07-09 16:22:49 字數 1144 閱讀 1586

我們都知道objective c不能像c++一樣支援多繼承,但是在oc的使用經常會碰到需要使用多繼承的情況。例如,classa中有methoda,classb中methodb,而現在需要使用這兩個類中的方法。如何按照c++的程式設計思路,毫無疑問採用多繼承就搞定了,在oc就需要動動腦子了。 

其實我們在學習設計模式的時候知道,多繼承的效率不高,而且採用組合的模式可以完全代替繼承模式。那麼,這種思路完全可以用在oc中實現多繼承(或許oc拋棄多繼承,就是強迫我們使用更高效的組合設計模式吧!)。下面用實際的**來表示組合如何來代替多繼承。 

現在classc需要繼承classa中methoda、classb中methodb,具體的**實現為:

//定義classa以及其methoda

@inte***ce

classa : nsobject

-(void)methoda;

@end

//定義classb以及其methodb

@inte***ce

classb : nsobject

-(void)methodb;

@end

//定義classc以及其需要的methoda,methodb

@inte***ce

classc : nsobject

-(id)initwitha:(classa *)a b:(classb *)b;

-(void)methoda;

-(void)methodb;

@end

//注意在classc的實現

@implementation

classc

-(id)initwitha:(classa *)a b:(classb *)b

-(void)methoda

-(void)methodb

上面是採用組合的方式實現了多繼承的功能,解決了oc不能多繼承的語法。那麼還有其他的方式來實現多繼承嗎?

雖然oc在語法上禁止類使用多繼承,但是在協議的遵守上卻允許使用多繼承。所以可以用協議來實現多繼承。但是協議只能提供介面,而沒有提供實現方式,如果只是想多繼承基類的介面,那麼遵守多協議無疑是最好的方法,而既需要多繼承介面,又要多繼承其實現,那麼協議是無能為力了。多協議遵守比較簡單,具體的實現方式這裡就不講了!

**:

iOS開發筆記

1.預設快取策略下 useprotocolcachepolicy 對於靜態資源的訪問,請求頭會自動帶上 if none match if modified since 快取方面,響應頭帶有 last modified etag 兩個字段 儘管charles抓包結果為304,但是 urlsession...

ios開發筆記 4

title ios開發筆記 4 date 2016 02 21 01 11 55 categories ios tags ios,筆記 一般此問題 都是由inte ce build與 中iboutlet的連線所引起的。可能是在 中對iboutlet的名稱進行了修改,導致inte ce build中的...

我的ios開發筆記

這個星期開始學習 ios開發 由於本人記性不好 將知識點在這篇文章做乙個備忘 以下是網路上摘錄知識點的索引。json 我用的是jsonkit property synthesize property是乙個屬性訪問宣告,擴號內支援以下幾個屬性 1,getter gettername,setter se...