2014-07-04 135 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