使用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,会发生什么情况?
最佳答案
nameDict
和requestDict
都引用了nameArray
指向的单个数组。两种字典都可以看到对nameArray
所做的更改。
完成[nameArray removeAllObjects]
后,您会在两个字典中看到对数组的更改,因为两个字典都引用了可变数组的一个副本。
如果将nameArray
设置为nil
,则不会发生任何事情。两个字典仍然引用可变数组。
关于ios - NSMutableArray中的内存管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31995292/