这是我关于Stack Overflow的第一个问题,我希望它非常简单。我编写了以下代码来确定我在这种情况下添加到'outerArray'的确切内容:
NSMutableArray *contents = [[NSMutableArray alloc] initWithContentsOfFile:path];
outerArray = [[NSMutableArray alloc] initWithCapacity:2];
[outerArray addObject:contents];
[contents removeObjectAtIndex:0];
[contents release];
contents = nil;
NSMutableArray *test = [outerArray objectAtIndex:0];
NSLog(@"Test at 0: %@", [test objectAtIndex:0]);
现在,令人困惑的部分是这样的:我看到的是最初由NSLog写出的'contents'索引1处的元素。这对我没有意义:
我唯一能想到的是我将'contents'的指针添加到'outerArray',但是释放它不会覆盖数据。所以,我现在基本上很幸运,NSLog没有失败,但它可以,稍后。
这是对的吗?
答案 0 :(得分:1)
您看到的内容是正确的:NSMutableArray
会保留添加到其中的对象,因此即使您的代码已经发布了对它的引用,contents
仍然有效。第二个引用(来自outerArray
内部)是释放内部数组(以前称为contents
)的原因。没有涉及复制。
答案 1 :(得分:0)
它正在向“outerArray”添加一个'contents'指针 在你做[outerArray addObject:contents];
之后内容保留将+1,
所以你做了
[内容发布]; contents = nil;
它只是使内容保留-1 并让内容(它是一个指针)指向nil
NSLog(@“测试0:%@”,[test objectAtIndex:0]);
不会发生任何错误