你如何打印实例名称?

时间:2013-12-13 05:13:38

标签: objective-c cocoa

我正在尝试打印数组中几个对象的名称。它们都是名为StockHolding的类的实例化,并命名为stock1,stock2和stock3。但我无法弄清楚如何让NSLog打印这些实例的实际名称。相反,它打印出实例所属类的名称和内存地址(例如,“2013-12-12 21:06:05.782股票[18093:303]股票价值2.30,当你买它。它现在价值4.50你有40股。“)。我希望它打印“Stock stock1值得......”如何让NSLog打印出阵列中实例的名称?以下代码段:

    NSMutableArray *myStocks = [[NSMutableArray alloc] init];

    [myStocks addObject:stock1];
    [myStocks addObject:stock2];
    [myStocks addObject:stock3];
    for (StockHolding *s in myStocks) {
        NSLog(@"Stock %@ was worth %.02f when you bought it. It's now worth %.02f. You have %d shares of it.", s, s.purchaseSharePrice, s.currentSharePrice, s.numberOfShares);
    }

2 个答案:

答案 0 :(得分:5)

名称stock1stock2stock3不属于这些对象;它们属于您将这些对象放入的变量。

即便这样也不太对劲。变量有指针;你将每个对象的指针放入每个变量中。

将物体视为气球;指针是您保持对象的字符串。如果你没有将指针绑在任何东西上,或者你解开它,那么物体就会飞走。变量是绑定气球字符串的夹板,只要变量存在且气球被绑定到它们,气球就会保留在你的身上。

您可以将单个字符串绑定到多个帖子。您可以将同一对象(的指针)分配给多个变量:

stock1 = [[StockHolding alloc] init]; //Or something
stock2 = stock1;
stock3 = stock2;

在最后一行之后,该对象的名称是什么?

无。它没有。或者,如果它具有name属性,则它没有更改,因为这些行都没有设置该属性。

这些行的作用是将一个StockHolding的字符串绑定到三个不同的帖子:所有三个变量 - 名为stock1stock2stock3的变量 - 现在指向同一个对象

答案 1 :(得分:4)

实现description方法以返回描述实例的任何字符串。对于调试目的非常有用。不应该用于向用户显示字符串。

description方法被记录为NSObject documentation的一部分。

通过这样做,NSLog(@"array %@", array)将包含由description的实现确定的数组中所有对象的描述。

相关问题