代码之家  ›  专栏  ›  技术社区  ›  angraankit

NSMutableArray中的内存管理

  •  1
  • angraankit  · 技术社区  · 9 年前

    我在使用NSDictionary时有点困惑。我有一个数组( 名称数组 ),我将该数组添加到字典( 名称字典 )最后我把这本词典添加到另一本词典中( 请求字典 ).

    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会发生什么?

    1 回复  |  直到 9 年前
        1
  •  1
  •   rmaddy    9 年前

    二者都 nameDict requestDict 具有指向单个数组的引用 nameArray 。对所做的更改 名称数组 这两本词典都有。

    你做的时候 [nameArray removeAllObjects] 您可以在两个字典中看到对数组的更改,因为两个字典都引用了可变数组的一个副本。

    如果您设置 名称数组 nil ,什么都没有发生。这两个字典仍然有对可变数组的引用。