首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到一个实例的类,然后在objective - c中声明该类的另一个实例?

如何找到一个实例的类,然后在objective - c中声明该类的另一个实例?
EN

Stack Overflow用户
提问于 2014-06-16 15:01:44
回答 1查看 43关注 0票数 0

我正在使用core-graphics,在我的应用程序中,我正在绘制不同类型的形状并操纵它们。所以我有大约150个UIView对象(形状)可以由用户选择。

我有一个NSObject类,它有用来改变形状大小的滑块。因此,我将视图实例从每个UIView传递到这个NSObject类,以修改其大小。

NSObject类中,我有一个如下所示的函数:

代码语言:javascript
复制
-(id) initWithView:(id)shapeView
{
   ...
}

因此,在运行时,当用户选择一个形状并移动滑块时,该形状实例将传递给NSObject类中的此函数。现在我可以操纵特定"shapeView“的大小了。

但问题是我不能访问它所属的UIView类的函数。

我不能使用下面这样的代码,因为shapeView的类型在编译时是未知的,它会抛出错误:

代码语言:javascript
复制
[shapeView someFunction:];

例如,用户在app中选择一个矩形。则shapeView的类类型为Rectangle。我可以使用[view class]找出这一点。所以我可以修改矩形的大小,但是不能访问它的函数。要访问函数,我必须在NSObject类中声明一个Rectangle类型的实例。因此,我的问题是如何从实例(在本例中为shapeView)中提取类名,并声明该类类型的实例。

我知道一种方法是检查每种类型的UIView类的类型,然后相应地创建实例。但正如我所说的,有150个UIView类,将来我会添加更多。那么,有没有其他方法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2014-06-16 15:20:42

我不认为每个单独的形状都有一个子类是个好主意。如果您有一个形状不规则的多边形,那么最好先声明一个像Polygon这样的类,然后再声明像numberOfSidesarea这样的属性,甚至声明NSArray* edgesNSArray* angle。然后你会有一个drawRectangle方法,它将获取数据,并根据它所拥有的帧在屏幕上呈现它。

CircularComposite可能是其他类,它们的复合是由两个单独定义的形状组成的任何奇怪的形状。

我建议您重新考虑您的设计,使其更易于管理。你永远不需要维护那么多的类,这就是我们首先使用Polymorphism的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24238171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档