1. 程式人生 > >iOS開發筆記--Objective-C實現多繼承

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

我們都知道objective C不能像C++一樣支援多繼承,但是在OC的使用經常會碰到需要使用多繼承的情況。例如,ClassA中有methodA,ClassB中methodB,而現在需要使用這兩個類中的方法。如何按照C++的程式設計思路,毫無疑問採用多繼承就搞定了,在OC就需要動動腦子了。
其實我們在學習設計模式的時候知道,多繼承的效率不高,而且採用組合的模式可以完全代替繼承模式。那麼,這種思路完全可以用在OC中實現多繼承(或許OC拋棄多繼承,就是強迫我們使用更高效的組合設計模式吧!)。下面用實際的程式碼來表示組合如何來代替多繼承。
現在ClassC需要繼承ClassA中methodA、ClassB中methodB,具體的程式碼實現為:

  //定義ClassA以及其methodA

@interface ClassA : NSObject {
}

-(void)methodA;

@end
//定義ClassB以及其methodB
@interface ClassB : NSObject {
}

-(void)methodB;

@end
//定義ClassC以及其需要的methodA,methodB
@interface ClassC : NSObject {
  ClassA *a;
  ClassB *b;
}

-(id)initWithA:(ClassA *)A b:(ClassB *)B;

-(void)methodA;
-(void
)methodB; @end //注意在ClassC的實現 @implementation ClassC -(id)initWithA:(ClassA *)A b:(ClassB *)B{ a=[[ClassA alloc] initWithClassA: A];//[A copy]; b=[[ClassB alloc] initWithClassB: B];//[B copy]; } -(void)methodA{ [a methodA]; } -(void)methodB{ [b methodB]; }

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

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