使用NSDictionary时我有些困惑。我有一个数组(nameArray),我将该数组添加到Dictionary(nameDict)中,最后将此字典添加到另一个Dictionary(requestDict)中。

NSMutableArray *nameArray = [[NSMutableArray alloc] initWithObjects:@"abcd",@"lmnop",@"xyz",@"pqr", nil];
NSMutableDictionary *nameDict = [NSMutableDictionary alloc] initWithObjectsAndKeys:nameArray,@"name", nil];
NSDictionary *requestDict = [NSDictionary dictionaryWithDictionary:nameDict];

当我从nameDict删除对象时,requestDict不受影响。
[nameDict removeAllObjects]

到现在为止还挺好。但是我的查询是当我从nameArray删除对象时,为什么responseDict会受到影响。
[nameArray removeAllObjects];
为什么nameArray仍然有对象。我从nameDict中删除对象后,就不应该将其释放。请帮助我了解我是否在这里缺少任何东西。

如果在这种情况下将nameArray设置为nil,会发生什么情况?

最佳答案

nameDictrequestDict都引用了nameArray指向的单个数组。两种字典都可以看到对nameArray所做的更改。

完成[nameArray removeAllObjects]后,您会在两个字典中看到对数组的更改,因为两个字典都引用了可变数组的一个副本。

如果将nameArray设置为nil,则不会发生任何事情。两个字典仍然引用可变数组。

关于ios - NSMutableArray中的内存管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31995292/

10-09 02:31