2013-12-13 58 views
1

我試圖打印數組中的幾個對象的名稱。它們都是名爲StockHolding的類的實例,並被命名爲stock1,stock2和stock3。但我無法弄清楚如何讓NSLog打印這些實例的實際名稱。相反,它會打印出實例所屬類的名稱和內存地址(例如,「2013-12-12 21:06:05.782股票[18093:303]當你購買股票時,股票的價值是2.30。現在價值4.50你有40股。「)。我希望它打印「股票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); 
    } 
+4

變量名在運行時不存在。你只有指針,沒有名字。 – rmaddy

+0

您可以定義1個NSString屬性,將值分配爲stock1和stock2,並將它們打印出來 –

回答

4

名稱stock1,stock2stock3不屬於這些對象;它們屬於你將這些對象放入的變量。

即使這並不完全正確。變量包含指針;你將一個指向每個對象的指針放入每個變量中。

將對象想象成氣球;指針是你持有對象的字符串。如果你沒有將指針與任何東西綁定,或者如果你解開它,對象就會飛走。這些變量是您將氣球的琴絃連接到的夾板,只要變量存在並且氣球與他們綁在一起,氣球就會保留。

您可以將單個字符串綁定到多個帖子。您可以在同一對象(的指針)分配給多個變量:

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

最後一行之後,什麼是對象的名稱?

沒有。它沒有一個。或者,如果它具有name屬性,則它沒有更改,因爲這些行都沒有設置該屬性。

什麼的那些行做的是領帶的一個股份制的字符串到三個不同的崗位:所有三個變量,命名stock1變量,stock2stock3 -now指向同一個對象。

3

執行description方法來返回任何要描述實例的字符串。對於調試目的非常有用。不應該用於向用戶顯示字符串。

description方法記錄爲NSObject documentation的一部分。

通過這樣做,然後NSLog(@"array %@", array)將包括由您的實施description決定的陣列中所有對象的描述。

+0

是的,OP大概需要的是一種輕鬆打印股票名稱的方法。實現'description'只是簡單地返回任何包含股票名稱的內部變量。 –

+0

如果StockHolding目前沒有「description」的股票名稱返回,那麼這也在提問者的待辦事項列表中:添加一個'name'屬性。 –