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 *
值的框 - 但这并没有改变本质怎么回事,一箱就是一箱。
您首先要三个框,然后将值放入您命名为 array1
和 array2
的框。
接下来,在您命名为 section
的框中输入一个值(始终以小写字母开头变量名)。你放在section
中的值并不像42
那样简单,而是可以容纳其他值的
您然后 复制 值 在您的两个框中 array1
和 array2
并将它们添加到value
您已存储在框 section
中。这些复制的值与它们来自的盒子名称无关,盒子名称array1
和array2
不会复制到存储在盒子[=中的值中34=].
那么存储在array1
、array2
和section
框中的值是多少?
此时尽量不要斜视...
上面我说了section
中存储的值并不像42
那样简单,而是可以存储其他值。 array1
和 array2
也是如此。但那个值是多少?好吧,它是 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。
希望能帮到你,而不是让你感到困惑!
嗨,我无法在另一个可变数组中获取可变数组的名称
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 *
值的框 - 但这并没有改变本质怎么回事,一箱就是一箱。
您首先要三个框,然后将值放入您命名为 array1
和 array2
的框。
接下来,在您命名为 section
的框中输入一个值(始终以小写字母开头变量名)。你放在section
中的值并不像42
那样简单,而是可以容纳其他值的
您然后 复制 值 在您的两个框中 array1
和 array2
并将它们添加到value
您已存储在框 section
中。这些复制的值与它们来自的盒子名称无关,盒子名称array1
和array2
不会复制到存储在盒子[=中的值中34=].
那么存储在array1
、array2
和section
框中的值是多少?
此时尽量不要斜视...
上面我说了section
中存储的值并不像42
那样简单,而是可以存储其他值。 array1
和 array2
也是如此。但那个值是多少?好吧,它是 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。
希望能帮到你,而不是让你感到困惑!