将实例名称作为NSString获取

时间:2013-07-06 05:37:38

标签: objective-c

让我们说我创建了一个名为Rectangle的类。我创建了一个可变数组(称为allRectangles)并向数组中添加了四个不同的矩形:

前:

Rectangle *rect1 = [[Rectangle alloc] init];
[allRectangles addObject: rect1];

...重复了rect2,rect3和rect4

如果我使用迭代遍历数组 for (Rectangle *rect in allRectangles)而我只想输出每个名称,我该怎么做?例如,如果我这样做:

NSLog(@"%@", rect)

它将打印类名和内存地址。我希望它打印rect1然后rect2等等...请帮助???

3 个答案:

答案 0 :(得分:4)

代码段中的对象没有名称,至少没有显示。也就是说,Rectangle类似乎没有name属性或类似的东西。

我怀疑您将变量名称(例如rect1)与对象名称混淆。它们不是同一件事。 rect1是指向对象(Rectangle类的实例)的指针变量,但该事实不会影响对象。一个对象可以在其生命周期中由许多不同的变量指向,但这并不意味着任何这些变量的名称是对象的名称。 (请注意,在你的for-in循环中,每个对象都由变量rect指向。你是否期望这个事实导致对象被命名为“rect”?)

如果您希望对象具有类似“rect1”的名称,则需要向该类添加name属性,并在您创建的每个对象上设置该属性。

答案 1 :(得分:0)

为什么不将元素存储在NSDictionary而不是NSArray中,并按变量名称检索它们?

NSMutableDictionary *dict = [NSMutableDictionary new] ;   

Rectangle *rect1 = [[Rectangle alloc] init];
[dict setObject:rect1 forKey:@"rect1"];


for (NSString *key in [dict allKeys]) {
    NSLog(@"%@ => %@", key, [dict objectForKey:key]); 
}

答案 2 :(得分:0)

本地变量名称是源代码信息,它在您运行的代码中不存在,它甚至可以理解下面的“矩形名称”是什么

Rectangle * rect1 = [[Rectangle alloc] init];
Rectangle * rect2 = rect1;

rect1或rect2

如果您希望矩形具有名称,则必须为其指定属性,并在创建每个矩形时进行设置。