嗨,我无法在另一个可变数组中获取可变数组的名称
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
答案 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 *
值的方框 - 但这并没有改变什么是继续,盒子是盒子。
首先请求三个框,然后将值放在您命名为array1
和array2
的文件中。
接下来,在您命名为section
的框中输入一个值(始终以小写字母开始变量名称)。您放在section
中的值并不简单,如42
,但可以包含其他值。
然后在<{1}}和array1
两个框中复制 值,然后将它们添加到array2
你的value
存储在方框section
中。这些复制的值与它们来自的方框名称无关,方框名称array1
和array2
不会复制到方框section
中存储的值中
那么array1
,array2
和section
框中存储的值是什么?
此时尽量不要睁眼...
上面我说section
中存储的值并不简单,如42
,但可以保存其他值。 array1
和array2
也是如此。但这个价值是多少?好吧它是NSMutableArray *
类型的东西,我们知道这就是我们要求的 - 三个可以容纳NSMutableArray *
值的盒子。
*
中的NSMutableArray *
表示“框名”!因此,类型NSMutableArray *
是“包含NSMutableArray
值的框的框名”。当你写:
section = [[NSMutableArray alloc]init];
右侧是查找能够保存NSMutableArray
值的框的说明(注意:没有*
),此指令返回将该框的名称作为其值。该值存储在section
中。而且这个值不是aBigBoxWhichCanHoldAnNSMutableArray
,甚至不是fred
,上面的说明并没有给它一个友好的友好名称 - 它只是盒子的计算机名称,如:
1101111010101101111110101100111011011110101011011111101011001110
这一切意味着当你写作时:
[section addObject: array1];
array1
中的值被复制到section
中存储的值中。 值是一个框名称,但它肯定不是"array1"
,甚至不是您称为array1
的框的计算机实名。它是存储在该框中的名称,该名称对您来说基本上没有意义 - 一个0和1的长字符串。
希望这有助于解决问题!