【问题标题】:How can I create a new object of the same class as an object I already have?如何创建与已有对象具有相同类的新对象?
【发布时间】:2013-01-24 08:04:21
【问题描述】:

我有一个包含不同类型对象的数组:UIButtons、UILabels、UITableViews 等。

有什么方法可以在不使用if/else 条件的情况下在数组中循环时动态创建这些对象,如下所示:

for (NSObject *obj in objectsArray)
{
    if ([obj isKindOfClass:[UIButton class]]) 
    {
         UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
         [self.view addSubview:btn];
    }
    else if ([obj isKindOfClass:[UILabel class]]) 
    {
        UILabel *lbl = (UILabel*)obj;
        [self.view addSubview:lbl];
    }
}

我们可以使用反射或动态的方式创建像UIButton *btnUILabel *lbl 这样的对象吗?

【问题讨论】:

  • 如果对象已经在数组中,为什么要再次创建它们??
  • 如果初始化器不同(UIButton),你必须if/else。
  • 数组中的对象是实例还是类对象?

标签: objective-c cocoa-touch introspection


【解决方案1】:

你可以这样做

for (Class _class in classArray) {
    id object = [[_class alloc] init];
}

for (NSString *className in classNameArray) {
    id object = [[NSClassFromString(className) alloc] init];
}

所以你不需要类引用的实例。

【讨论】:

  • 这假定数组中的对象要么是表示类对象的字符串,要么是类本身;从 OP 的代码来看,情况并非如此:数组包含 instances.
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2013-04-05
相关资源
最近更新 更多