自动创建类实例

时间:2013-05-06 18:24:19

标签: objective-c variables instantiation

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

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

你知道如何“动态”创建这些对象吗?

2 个答案:

答案 0 :(得分:0)

当他选择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:实施作为练习留给读者,这取决于你没有描述的太多细节。

答案 1 :(得分:0)

好吧,你的问题解决了,好!但是你的问题还解决了一个尚未解决的问题:“动态创建类给出特定名称”的实例,以便稍后使用这些名称来引用它们
引用对象本质上意味着向它发送消息。在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]向对象发送消息;
也许有一种更容易的方法......