objective c: 无法读取可变数组的名称

objective c: unable to read the name of mutable array

嗨,我无法在另一个可变数组中获取可变数组的名称

NSMutableArray *array1;
NSMutableArray *array2;
NSMutableArray *Section;

array1 = [NSMutableArray arrayWithObjects:@"row 1", @"row 2",nil];
array2 = [NSMutableArray arrayWithObjects:@"row one", @"row two", @"row three", @"row four",nil];

Section = [[NSMutableArray alloc]init];
[Section addObject: array1];
[Section addObject: array2];

当我尝试获取名称时,我得到了这个:

NSLog(@"%@",[Section objectAtIndex:0]);

这是输出:

"row 1",
"row 2"

我怎样才能得到名称 array1 和 array2?

预期输出为:

数组 1

接下来的内容当然是说明性的,但这实际上是正在发生的事情。

您似乎误解了变量是什么,它只是一个盒子。当你写:

NSInteger rowCount;

您请求系统从一堆未使用的盒子中找到一个大小刚好可以存储类型 NSInteger 的盒子。电脑里有很多盒子,需要一个away来区分,所以每个盒子都有一个名字。这个名字好难懂,大概是这样的:

0000000000001101000111001110110110111110111011111100101011111110

因为计算机通常只使用 0 和 1。你不能在计算机程序中使用它,你会一直输入错误,即使你把它编码成对人类更合理的东西,它也毫无意义:

D1CEDBEEFCAFE

它仍然毫无意义。

(真的是一样的!不过0'1和1当然是我挑的很仔细的,大部分名字都不太好记。)

鉴于此计算机语言允许您使用更易读且更有意义的名称,如上文 rowCount,以引用您请求的框 - 编译器会保留从您的名称到真实名称的映射。

重要:以上都是关于变量(又名盒子)的命名方式,它没有 与您可能放入框中的 相关。所以当你写:

rowCount = 42;

42 没有获得替代名称 rowCount,所发生的只是值 42 已放入名为 rowCount 的框中(在我们的示例中,计算机框的方便名称 D1CEDBEEFCAFE)。如果你以后写:

NSInteger anotherRowCount = rowCount;

然后 rowCount 中的 ,当前 42,被复制到名为 anotherRowCount 的框中。如果您查看 anotherRowCount 框,您只会看到 42,没有提及该值来自 rowCount

变量名和变量包含的值是不同的,名称和值之间没有联系。

现在,如果您回顾一下您的代码,它会涉及更多,而不是包含 NSInteger 值的框,而是包含 NSMutableArray * 值的框 - 但这并没有改变本质怎么回事,一箱就是一箱。

您首先要三个框,然后将值放入您命名为 array1array2 的框。

接下来,在您命名为 section 的框中输入一个值(始终以小写字母开头变量名)。你放在section中的并不像42那样简单,而是可以容纳其他值的

您然后 复制 在您的两个框中 array1array2 并将它们添加到value 您已存储在框 section 中。这些复制的值与它们来自的盒子名称无关,盒子名称array1array2不会复制到存储在盒子[=中的中34=].

那么存储在array1array2section框中的是多少?

此时尽量不要斜视...

上面我说了section中存储的值并不像42那样简单,而是可以存储其他值。 array1array2 也是如此。但那个值是多少?好吧,它是 NSMutableArray * 类型的东西,我们知道这就是我们所要求的 - 三个盒子可以容纳 NSMutableArray * 个值。

NSMutableArray *中的*就是"box name"!所以类型 NSMutableArray * 是 "box name of a box holding an NSMutableArray value"。当你写:

section = [[NSMutableArray alloc]init];

右手边是找一个能装NSMutableArray的盒子的指令(注:没有*),这条指令returns 该框的 name 作为它的值。该值存储在 section 中。而且这个值不是 aBigBoxWhichCanHoldAnNSMutableArray,甚至 fred,上面的指令没有给它一个友好的名字——它只是盒子的计算机名称,比如:

1101111010101101111110101100111011011110101011011111101011001110

这意味着当你写:

[section addObject: array1];

array1中的复制到section中存储的中。 是一个盒子名称,但它肯定不是"array1",甚至不是你所调用的盒子的计算机真实名称array1。它是存储在那个盒子里的名字,这个名字对你来说基本上没有意义——一长串 0 和 1。

希望能帮到你,而不是让你感到困惑!