【问题标题】:Automatically creating class instances [duplicate]自动创建类实例[重复]
【发布时间】:2013-05-06 18:24:19
【问题描述】:

是否可以动态创建一个类的实例,并赋予它们特定的名称(例如 Friend1、Friend2 等)?

我有一个带有一些实例变量(例如姓名和姓氏)的“朋友”类。在我的应用程序中,用户从列表中选择他想要添加的“朋友”数量。因此,如果他选择 5,UITableView 将填充 10 个空字段(姓名和姓氏)。

您知道“即时”创建这些对象的任何方法吗?

【问题讨论】:

  • 不能用数组吗?
  • 一组已经实例化的对象?
  • 你能举个例子说明你到底在追求什么吗?如果用户选择了 N 个项目,则创建一个可变数组并用 N 个新项目填充它并让用户填充数据...
  • 这就是“计算机程序”所做的,至少有人告诉我。

标签: objective-c variables instantiation


【解决方案1】:

当他选择 5 时,创建一个朋友数组:

friends = [[NSMutableArray alloc] init];
for (int i = 0; i < 5; i++)
    [friends addObject:[[[Friend alloc] init] autorelease]];
[tableView reload];

(其中friends NSMutableArray 在视图控制器的接口部分中声明)

在 UITableViewDataSource 中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == friendsSection)
        return [friends count] * 2;
    else ...;
}

我将-tableView:cellForRowAtIndexPath: 的实现留给读者作为练习,这取决于你没有描述的太多细节。

【讨论】:

  • 我的示例没有使用适当的资源管理,当然,可能还缺少其他细节。
  • 我认为我需要知道对象的名称才能存储用户输入。
  • 你可以把friends[n]当作对象的名字,如果你想这样想的话。
  • ;-) 这解决了我的问题。非常感谢。
【解决方案2】:

好了,你的问题解决了,很好!但是您的问题还解决了一个尚未解决的问题:“动态创建类的实例为它们指定特定名称”,以便您以后可以使用这些名称引用它们强>.
引用一个对象本质上意味着向它发送消息。在 Objective-C 运行时,这是使用 objc_msgSend(id theReceiver, SEL theSelector, ...) 完成的。因此,您需要一个指向theReceiver 的指针。我将您的问题解释为“是否可以将指向新实例的指针与动态创建的名称相关联。我认为使用这样的字典可以做到这一点:
您可以动态创建标识符:NSString *myIdentifier = @"anyString"; 或任何其他方式来创建字符串。然后你创建你的类的一个实例:MyClass *myObject = [[MyClass alloc] init]; 或任何其他方式来实例化它。最终建立关联:NSDictionary *dict = @{myIdentifier: myObject};
稍后您可以向对象发送消息,使用对象的名称为[[dict objectForKey:myIdentifier] message];
也许有更简单的方法来做到这一点......

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2011-11-02
    • 2021-12-07
    • 2019-11-16
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多