2011-03-22 57 views
1

在我的程序中,我有一个名为Object的类,它继承自UIView。我也有其他的对象叫做:从Object继承的圆形,方形,三角形。UIView/UIImageView继承

我的问题是,我想做一个可能的对象称为图像,它也从Object继承。我希望屏幕上的所有对象都从Object继承,然后将NSArray指针传递给包含屏幕上所有对象的物理函数。

什么是使我的图像对象获得我的对象类的所有属性的最佳方式是什么?

我应该为我的Image对象创建新的属性,还是有办法继承Object并仍然能够显示图像,因为Object从UIView继承而不是UIImageView。

回答

1

这是一个非常不寻常的方式来做到这一点。你有没有任何Java经验?

你想用形状做什么?你是否试图在他们各自的课堂中绘制它们?在这里,你正在模糊MVC的界限。从看起来,你的圆形,方形等类都是模型和视图,不应该发生。如果您正在尝试绘制形状,则不会为它们创建类 - 您将使用Quartz drawing methods在视图控制器视图中绘制它们。如果您试图存储有关这些形状的信息,那么您不希望它们从UIView继承。 NSObject(或自定义Shape类)将是更好的选择。 (调用类“Object”也是一个坏主意 - 它可能会与NSObject混淆)。

你是第二段是我的第一个问题来自哪里。你的NSArray不是而是必须包含相同类型的变量 - 这与Java的数组(和其他语言,如C#和C)非常不同。因此,除非你想要继承某些方法或ivars,否则没有理由声明Object类。

至于显示图像,你打算如何处理图像?如果你只是想显示图像(一个视图),然后使其成为UIImageView(它是UIView的子类)的子类。如果你想存储关于图像的信息,使它成为Shape的子类(或者在这种情况下,你的对象)。然而,你真的不能做你想做的事(从Object和UIImageView继承),因为你不应该组合视图和模型的功能。

真的,你最好的选择是重温你的类,让他们坚持MVC,并重新思考你的继承链。希望这可以帮助!

1

最简单的事情是让Image继承Object,然后让Image拥有UIImageView类型的子视图。

+0

这就是我正在寻找的,它并没有跨越我的想法这样做,谢谢。 – Dalisto1 2011-03-22 20:59:55

2

你已经意识到一个类不能扩展两个父类。

您的“对象”可以是协议而不是类?这样,圆形,方形和图像都可以实现该协议,同时根据需要扩展UIView或UIImageView?

+0

这也是一个好主意。要问的问题是:你的Object类是否需要存储实例变量?如果Object只提供方法来调用,那么它可以被制成一个协议。如果它必须存储每个对象的数据,那么它不能是一个协议。 – Vagrant 2011-03-22 21:01:51