2

在我的应用程序中,我想将对象插入 NSMutableArray:

NSMutableArray *test = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4], nil];
[test insertObject:[NSNumber numberWithInt:2] atIndex:1];

我在第二个代码行放了断点,调试区域的结果是好的:

self = (MasterViewController *) 0x074b9cb0
test = (NSMutableArray *)   0x07462c50 @"3 objects"
   [0] = (id)   0x07461f10 (int) 1
   [1] = (id)   0x07473ec0 (int) 3
   [2] = (id)   0x074cbd30 (int) 4

但运行第二行代码后,结果出乎意料:

self = (MasterViewController *) 0x074b9cb0
test = (NSMutableArray *)   0x07462c50 @"4 objects"
   [0] = (id)   0x074713f0 (int) 2
   [1] = (id)   0x07473ec0 (int) 3
   [2] = (id)   0x074cbd30 (int) 4
   [3] = (id)   0x07461f10 (int) 1

谁能解释为什么在索引 1 处插入后第一个对象(int 1)成为最后一个对象,或者这种情况是 ios 6.1 的错误?

在索引> 1处插入对象时,没有问题。

4

1 回答 1

3

我很少相信来自该领域的结果。请改用调试器命令。数组正在正确创建。我复制并粘贴了这两行,我得到了

(lldb) po 测试
$0 = 0x1dda1ad0 <__NSArrayM 0x1dda1ad0>(
1,
3,
4
)

在第一行之后,和

(lldb) po 测试
$1 = 0x1dda1ad0 <__NSArrayM 0x1dda1ad0>(
1,
2,
3,
4
)

在第二行之后。但是,结果是您在变量窗口中所说的方式。这个故事的寓意是,相信调试器而不是变量窗口!

于 2013-03-01T07:42:41.007 回答