将 Null 值和一个变量传递给 NSMutableArray/NSArray。为什么输出会有差异?

Passing Null Values and a variable in to NSMutableArray/NSArray. Why is there a difference in output?

我的问题是如何将 Null 值传递给 NSMutableArray/NSArray。

但是通过搜索 google 并浏览不同的站点,我认为我已经达到了我的目的。但是,在尝试的过程中,我又产生了新的疑问。

看下面的代码来理解我的问题

我正在声明一个可变数组并最初用一些对象对其进行初始化,而且我在声明本身时将一个空值传递给它。

现在当我 运行 下面这段代码时

NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",@"last", nil];

[ar addObject:[NSNull null]];

NSLog(@"%@",mar); 

o/p 是:

(
    first,
    last,
    "<null>"
)

但我真正的疑问是当我如下初始化 NSMutableArray 时

NSString *str;

NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];

[ar addObject:[NSNull null]];

NSLog(@"%@",mar); 

o/p 是:

(
    first,
    "<null>"
)

数组中的第 2 个元素是 "null",我知道因为我传递了一个变量而没有给它赋值。它正在打印空值。但是为什么没有打印剩余的元素。

据我所知,数组在初始化时只要克服nil就会停止添加元素。但是在这里,在这种情况下。 o/p 显示第二个元素也为空。(但不是零。)

那为什么剩下的元素没有打印出来

更新问题

NSString* str;
NSLog(@"%@",str); 
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];

NSLog(@"%@",mar);

上面代码的o/p是

(null) // for str an uninitialised NSString variable.


(
    first // first element in the array
)

如果 str 中存在的值为 (null),为什么数组遇到 nil 并停止向数组添加元素并打印它们。

现在,有人回答这个问题吗?

initWithObjects 使用 nil 作为最后一项的标记。如果将 nil(单元化的 str 变量)作为 4 项中的第 2 项传递给它,实际上只会添加第一个。

[[NSMutableArray alloc]initWithObjects:@"first",str ?: [NSNull null],@"last", nil];

将通过将 nil 替换为 [NSNull null] 来解决您的问题。

另见 NSArray creation with variable argument lists

在 objective-C 中,当遍历数组时,如果遇到 nil/null 则它被视为数组的结尾。

这就是它不打印剩余值的原因。

如果你想在 nil/null/Nil 之间有明显的区别,那么检查 Difference between nil, NIL and, null in Objective-C