-6

このコード行を理解するのに助けが必要です:

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

特に、「*」ポインター宣言の後に変数が続かない理由と、「a」が引数の外にある理由。

また、(!stockHolding) とはどういう意味ですか?

4

3 に答える 3

1

あなたはC(++)出身のようです。Objective-C でメソッドがどのように宣言されているかを読む必要があります。簡単に言えば、引数宣言の構文は次のとおりです。

( <type> ) <identifier>

あなたの例では、タイプはStockHolding *あり、識別子aです。

この式!stockholdingは単なる標準的な C イズムですstockholding == nil- 後者はより明示的であるため、前者は C 愛好家に好まれます ;-)

Objective-C 言語の紹介の 1 つを読むことをお勧めします。

于 2013-10-28T07:02:48.587 に答える
0

このメソッドaでは、クラスのパラメーターですStockHolding.。そのため、メソッドにパラメーターを渡すときは、常に * 記号の後にクラスが続きます。それに応じてオブジェクトに型キャストするようにします。以下に例を示します。

これはNSStringクラスメソッドです:-

+ (id)stringWithString:(NSString *)aString

この aString は、型がNSStringクラスを参照するパラメーターです。したがって、このメソッドを呼び出すと、以下の例のように型キャストせずに文字列オブジェクトを直接渡すことができます:-

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

利点は、型キャストを行わずに文字列をメソッドのパラメーターに渡すことができることです。またif (!stockHolding)、nilをチェックしているだけで、オブジェクトが存在しなくなった場合は同じものを割り当てるだけです。

于 2013-10-28T06:53:21.363 に答える
0

これ以上の実装コードを見ないと、在庫を保持する可変配列 ivar が nil の場合、割り当てて初期化することを意味しているように見えます。これは一般的な警備員です。配列が非 nil であることを確認したら、渡された Stockholding オブジェクトを配列に追加します。

- (void)addStockHoldingObject:(StockHolding *)a
{
    if (!stockHolding) {
        stockHolding = [[NSMutableArray alloc] init];
    }
    [stockHolding addObject:a];
}
于 2013-10-28T06:58:27.017 に答える