2011-03-22 3 views
1

Dans mon programme, j'ai une classe appelée Object, qui hérite de UIView. J'ai aussi d'autres objets appelés: cercle, carré, triangle qui héritent de l'objet.UIView/UIImageView inheritance

Mon problème est que je voudrais faire un objet possible appelé Image, qui hérite également de Object. Je souhaite que tous les objets de l'écran héritent de Object, puis transmettez un pointeur NSArray à mes fonctions physiques contenant tous les objets à l'écran.

Quelle est la meilleure façon de faire en sorte que mon objet Image acquière toutes les propriétés de ma classe Object? Dois-je simplement créer de nouvelles propriétés pour mon objet Image, ou existe-t-il un moyen d'hériter de l'objet et de pouvoir afficher une image, puisque Object hérite de UIView et non de UIImageView.

Répondre

1

C'est une façon très ... inhabituelle de le faire. Avez-vous eu une expérience Java?

Qu'essayez-vous de faire avec les formes? Est-ce que vous essayez de les dessiner dans ces classes respectives? Ici, vous brouillez les lignes de MVC. De ce que cela semble être, vos classes Circle, Square, etc. sont à la fois un modèle et une vue, ce qui ne devrait pas arriver. Si vous essayez de dessiner les formes, vous ne créerez pas de classes pour elles. Vous utiliserez le Quartz drawing methods pour les dessiner dans la vue de votre contrôleur. Si vous essayez de stocker des informations sur ces formes, vous ne voudriez pas qu'elles héritent de UIView. NSObject (ou une classe Shape personnalisée) serait une meilleure option. (C'est aussi une mauvaise idée d'appeler la classe "Object" - elle pourrait être confondue avec NSObject).

Vous êtes le deuxième paragraphe d'où est venue ma première question. Votre NSArray pas doit contenir des variables du même type, ce qui est très différent des tableaux de Java (et d'autres langages tels que C# et C). Par conséquent, sauf s'il y avait des méthodes ou des ivars que vous vouliez hériter, il n'y avait aucune raison de déclarer la classe Object. En ce qui concerne l'affichage des images, que voulez-vous faire avec Image? Si vous voulez juste afficher des images (une vue), alors en faire une sous-classe de UIImageView (qui est une sous-classe de UIView). Si vous voulez stocker des informations sur les images, faites-en une sous-classe de forme (ou dans ce cas, votre objet). Cependant, vous ne pouvez vraiment pas faire ce que vous voulez (hériter de Object et UIImageView) parce que vous ne devriez pas combiner les fonctionnalités des vues et des modèles. Vraiment, votre meilleure option ici est de revoir vos classes, de les faire adhérer à MVC, et de repenser votre chaîne d'héritage. J'espère que cela t'aides!

1

La chose la plus simple serait que Image hérite de Object et que Image possède une sous-vue de type UIImageView.

+0

C'est ce que je cherche, ça ne m'a pas traversé l'esprit de le faire comme ça, merci. – Dalisto1

2

Vous avez réalisé qu'une classe ne peut pas étendre deux classes parentes.

Votre «objet» pourrait-il être un protocole plutôt qu'un cours? De cette façon, le cercle, le carré et l'image pourraient tous implémenter ce protocole tout en prolongeant UIView ou UIImageView selon les besoins?

+0

C'est aussi une bonne idée. La question à poser est la suivante: Votre classe Object a-t-elle besoin de stocker des variables d'instance? Si Object fournit uniquement des méthodes à appeler, il peut être transformé en protocole. S'il doit stocker des données avec chaque objet, il ne peut pas s'agir d'un protocole. – Vagrant