2014-07-04 133 views
1

所以基本上我一直在尋找一種方式來編寫我的代碼,其中有很多uiview實例(使所有內容看起來很雜亂!erk!)更具可讀性和優雅性。你爲什麼繼承UIView?

到目前爲止,我已經看到了使用子類,但並沒有真正理解使用練習的重要性/原因!

從我的理解:

"class2.m": 
  1. 你讓從UIView的繼承的類。

    「class1.m」:

  2. 從父 「的Class1」 你讓一個類從Class2中繼承的實例?

所以我想了解的是,爲什麼你有一個類從從另一個(UIView的)繼承了class2.m繼承,而不是直接從class1的繼承UIView的?

對不起,我聽起來像這樣一個固執的人,但我只是不明白它?我真的想知道爲什麼...

問候

編輯

能有人請解釋使用的像一個名爲USERPROFILE和guestProfile類的子類資料的例子嗎?

回答

1

一個比喻是說,UIView就像是Animal,現在class1.m是bird,class2.m是duck。鴨子是鳥是一種動物(繼承)

現在如果我們做一個新bird,我們不想只是從animal繼承,否則,我們將需要重新編碼的一切bird定義,這只是增加了代碼膨脹和浪費時間。

但是說你想製作一隻狗,我們不能明顯地繼承bird,因爲一隻狗不具備bird的任何特徵,所以我們不得不從動物繼承。

希望澄清事情有點

+0

德夫最好的答案! – ipalibowhyte

1

如果您有幾個類(class2,class3,class4 ...),它們從UIView繼承,但有一些共同點是很有用的。你把常見的東西放在class1中,並且讓這些類從class1繼承。

+0

@jcarom什麼是理想的模式嗎? – ipalibowhyte

0

基本上使用的子類是自定義的新功能,可以在其他類中重複使用爲好。

3

我的子類UIView的原因是我可以覆蓋-drawRect:做我自己的自定義繪圖。因爲Core Graphics繪圖代碼只能從這個方法執行,所以只能在子類中顯示,這給我一個定製我的視圖的機會。

+0

你可以正常使用initwithframe嗎? – ipalibowhyte

+1

我不得不說這是我看到的唯一的好答案。 –

1

簡短的回答:

爲了繼承所有UIView功能,並添加自定義功能,你的子類UIView

龍答:

你的問題涉及多個繼承比使用子類UIView明確的想法。繼承是一個簡單的概念,但如果你不熟悉面向對象的編程,會造成混淆。

如果您注意到,開發iOS應用程序時通常會使用的所有類都從NSObject繼承。 NSObject是大多數Objective-C類的根類,NSObject提供的主類方法(以及隨後的任何繼承NSObject的類)是alloc(或取決於用法的new)。這就是爲什麼你可以調用[UIView alloc],因爲alloc通過類繼承。 UIView本身不提供alloc的實現,而是通過NSObject繼承該方法。

一個簡單和常見的例子來說明繼承使用動物。假設我們在所有動物繼承的層次結構的根部有一個超類,稱爲Creature。現在讓我們繼承Creature以創建一個Mammal類。 Mammal類將繼承Creature class的所有功能(公共接口)。

@interface Creature{ 

} 
- (void)whatAmI; 

@end 

@implementation Creature 

-(void)whatAmI{ 

    NSlog(@"I am a Creature"); 
} 

@end 

@interface Mammal:Creature{ 

} 

@end 

實現我們的Mammal類:

Mammal *mammal1 = [[Mammal alloc]init]; 
[mammal1 whatAmI]; 

輸出:

我是一個怪物

注意Mammal繼承-whoAmI方法從父類Creature。您現在可以繼承Mammal,並且該子類將繼承MammalCreature的功能。繼承的層次可以繼續。

如果你想Objective-C中的一個堅定的認識,我建議在Objective-C由史蒂芬科昌編程。

資源,討論在Objective-C繼承:

http://www.techotopia.com/index.php/Objective-C_Inheritance

http://www.tutorialspoint.com/objective_c/objective_c_inheritance.htm

Objective-C multiple inheritance