【问题标题】:Autorelease object returned from NSArray?从 NSArray 返回的自动释放对象?
【发布时间】:2010-10-25 18:44:03
【问题描述】:

我正在编写一个NSArray 类别以包含-objectAtRandom 消息,该消息从随机索引返回一个对象(类似于Python 的choice)。

我应该在返回之前自动释放这个对象吗?我相信我不应该,但我不确定......

【问题讨论】:

    标签: objective-c cocoa memory-management nsarray autorelease


    【解决方案1】:

    根据正常的内存管理规则,不,你不应该。由于您大概使用objectAtIndex: 来返回对象,因此您不需要自己进行任何内存管理。

    【讨论】:

      【解决方案2】:

      我会写return [[object retain] autorelease] - 这将保证,即使数组将被释放,用户也将能够使用对象直到当前的 runloop 循环完成。

      【讨论】:

      • 这不是必需的。 NSArray 保持强引用,直到它从数组中删除。如果开发人员删除了数组,可能应该明白他们可能会释放它包含的所有对象。
      • @adam 所以如果用户想确保他不会以对对象的无效引用结束,他应该保留它并在完成后释放它?
      • 对。你可以做任何你想做的事,但是一旦你的代码释放了控制权,如果你想以后使用它,你必须保留这个对象。如果您只在本地范围内使用该对象,则实际上不需要保留它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多