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

时间:2016-02-23 14:16:26

标签: objective-c nsmutablearray

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

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?

预期输出为:

ARRAY1

1 个答案:

答案 0 :(得分:1)

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

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

NSInteger rowCount;

您要求系统从一堆未使用的框中找到一个框,这个框的大小恰好可以存储NSInteger类型的。计算机中有很多盒子,它需要一个可以区分的盒子,所以每个盒子都有一个名称。这个名字很难理解,比如:

0000000000001101000111001110110110111110111011111100101011111110

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

D1CEDBEEFCAFE

它仍然没有意义。

(他们真的是一样的!但我当然仔细挑选了那些0'1和1',大多数名字都不那么令人难忘。)

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

重要提示:以上所有内容都是关于如何命名变量(aka box), >值,您可以放在框中。所以当你写:

rowCount = 42;

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

NSInteger anotherRowCount = rowCount;

然后rowCount中当前为42被复制到名为anotherRowCount的框中。如果你查看anotherRowCount框,你看到的只有42,那么就没有提到rowCount的价值。

变量名称和这些变量包含的值是不同的,名称和值之间没有任何关联。

现在,如果你回顾一下你的代码,它会更加复杂,而不是持有NSInteger值的方框,你有一些持有NSMutableArray *值的方框 - 但这并没有改变什么是继续,盒子是盒子。

首先请求三个框,然后将值放在您命名为array1array2的文件中。

接下来,在您命名为section的框中输入一个值(始终以小写字母开始变量名称)。您放在section中的并不简单,如42,但可以包含其他值。

然后在<{1}}和array1两个框中复制 ,然后将它们添加到array2你的value存储在方框section中。这些复制的值与它们来自的方框名称无关,方框名称array1array2不会复制到方框section中存储的

那么array1array2section框中存储的是什么?

此时尽量不要睁眼...

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

*中的NSMutableArray *表示“框名”!因此,类型NSMutableArray *是“包含NSMutableArray值的框的框名”。当你写:

section = [[NSMutableArray alloc]init];

右侧是查找能够保存NSMutableArray 的框的说明(注意:没有*),此指令返回将该框的名称作为其值。该值存储在section中。而且这个值不是aBigBoxWhichCanHoldAnNSMutableArray,甚至不是fred,上面的说明并没有给它一个友好的友好名称 - 它只是盒子的计算机名称,如:

1101111010101101111110101100111011011110101011011111101011001110

这一切意味着当你写作时:

[section addObject: array1];

array1中的被复制到section中存储的中。 是一个框名称,但它肯定不是"array1",甚至不是您称为array1的框的计算机实名。它是存储在该框中的名称,该名称对您来说基本上没有意义 - 一个0和1的长字符串。

希望这有助于解决问题!