2013-10-28 19 views
-6

的方法,我需要一些幫助理解這行代碼:瞭解從Objective-C的

- (void)addStockHoldingObject:(StockHolding *)a 
{ 
    if (!stockHolding) { 
     stockHolding = [[NSMutableArray alloc] init]; 
    } 
    [stockHolding addObject:a]; 
} 

特別是爲什麼「*」指針聲明後面沒有變,爲什麼「一」是參數外。

另外,(!stockHolding)是什麼意思?

+0

首先告訴我什麼是股票在if(!stockHolding)中,從哪裏得到那個對象。 –

+1

(!stockHolding)意味着,您正在檢查內存是否已分配給stockHolding,而不是對象是否已創建。如果對象尚未創建,則它將返回零。所以如果沒有創建對象,那麼就爲它分配內存。 –

+0

(StockHolding *)代表一個類型.so'*'在裏面。 –

回答

0

在這個方法中a是類StockHolding.的參數所以當傳遞參數給方法時,總是*符號跟着類。這樣它會相應地對對象進行類型轉換。例如如下所示: -

這是NSString類方法: -

+ (id)stringWithString:(NSString *)aString 

在這種ASTRING是其類型是指NSString類的參數。因此,如果我們稱這種方法我們可以直接傳遞字符串對象,而無需強制轉換,例如如下所示: -

NSString *str=[NSString stringWithString:@"yourString"]; 

的優點是,沒有做型鑄造我們可以通過字符串的方法的參數。 另外if (!stockHolding)只是檢查它的意思,如果對象不再存在,然後只分配相同。

0

沒有看到更多的實現代碼,它似乎意味着 如果stockholding mutable array ivar是零,然後分配並初始化它。這是一個普通的後衛。 一旦您確定數組不是零,請將傳入的Stockholding對象添加到數組中。

- (void)addStockHoldingObject:(StockHolding *)a 
{ 
    if (!stockHolding) { 
     stockHolding = [[NSMutableArray alloc] init]; 
    } 
    [stockHolding addObject:a]; 
} 
1

這聽起來像你是從C(++)。您需要閱讀如何在Objective-C中聲明方法。在簡短的一個參數聲明的語法包含:

(<type>) <identifier> 

,並在您的示例類型爲StockHolding *和標識符a

表達!stockholding僅僅是標準的C-主義的stockholding == nil - 後者是更明確,從而前者用C愛好者;-)首選

我建議你去閱讀介紹的一到Objective- C語言。