-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 语言的介绍。

于 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,则分配并初始化它。这是一个普通的后卫。一旦确定数组不为零,将传入的 Stockholding 对象添加到数组中。

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