【问题标题】:what happends with the memory of the objects used in NSMutableDictionary when releasing the array?释放数组时 NSMutableDictionary 中使用的对象的内存会发生什么?
【发布时间】:2011-09-21 22:05:21
【问题描述】:

我很好奇当我使用[array release] 时,我使用[array addObject:object] 推送的对象的内存会发生什么情况

  • addObject 是否复制指针?
  • 我必须保留对象吗?
  • 我必须先创建一个 for 并释放每个对象,然后再释放数组吗?

【问题讨论】:

    标签: iphone objective-c release nsmutabledictionary autorelease


    【解决方案1】:

    当你打电话时

    [array addObject:object] 
    

    array 保留 object,从而增加其保留计数。

    稍后,当array 发送消息dealloc 时,它会在object 上调用release

    为避免内存泄漏,您可能必须在将object 添加到array 后释放它,例如

    NSObject *object = [[NSObject] alloc] init];
    [array addObject:object];
    [object release];
    

    请务必查看Memory Management Programming Guide,以确保您没有过度或不足释放object

    【讨论】:

    • 看起来你比我打败了这个!
    • "为避免内存泄漏,您应该在将对象添加到数组后释放它..." 嗯,不。 OP从未说明他如何获得参考。他应该像在其他任何地方一样遵循内存管理指南。
    【解决方案2】:

    addObject 对您添加的对象进行保留。当你释放数组时,它会自动调用它持有的所有对象的释放。

    【讨论】:

      【解决方案3】:

      当您执行 [array addObject: object] 时,数组将保留插入到数组中的对象。为避免内存泄漏,不要忘记释放插入的原始对象,否则插入数组的对象的保留计数将是 2 而不是 1:

      SomeClassObject *obj = [[SomeClassObject alloc] init];
      [array addObject:obj];
      [obj release];
      

      由于数组拥有数组内部的对象(持有指向该对象的指针并如前所述进行了保留),当您释放数组时,数组知道释放其中的任何对象。工作已为您完成!

      【讨论】:

        【解决方案4】:

        NSArrays 保留添加的对象,因此您不必自己添加额外的保留,完成后可以释放数组。

        【讨论】:

          猜你喜欢
          • 2015-06-17
          • 2016-07-13
          • 2011-11-09
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          • 2022-01-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多