【问题标题】:Objective c - NSDictionary retaining objects issue目标 c - NSDictionary 保留对象问题
【发布时间】:2012-05-27 14:13:05
【问题描述】:

我会尝试解释一下自己,我有一个对象 Person 和一个单例对象 PeopleManager,它有一个 NSDictionary *_people
_people 是一个字典,其中包含带有 @ 的 Person 对象987654326@ 作为密钥。

创建一个人后,我将其 (self) 添加到 _people 字典中(在 Person init 方法中)

people 字典应该保存 person 对象,直到 person 被 dealloc,但问题是如果我在代码中的某个地方分配 person 然后释放它,它不会得到 dealloc,因为 PeopleManager 仍然持有它_people 字典。

真正的问题是_people 字典保留了这个人,如果有可能有一个分配字典那就太好了,但我知道这是不可能的。

我能做些什么来解决这个问题?

【问题讨论】:

  • 如何将对象添加到 NSDictionary?它是不可变的,因此无法修改。

标签: iphone objective-c nsdictionary dealloc retaincount


【解决方案1】:

字典必须保留人员,因为它正在使用它。如果没有发生这种情况,则无法保证字典中的对象始终处于活动状态。

当您释放 Person 时,如果您不再需要它并期望它被释放,请通过 [NSMutableDictionary -removeObjectForKey:] 将其从字典中删除(从而减少保留计数)。这将需要使用 NSMutableDictionary,因为您无法从 NSDictionary 中删除对象。

【讨论】:

    【解决方案2】:

    如果您使用 NSDictionary 的可变对应物,您将能够使用简单的 -removeObjectForKey: 删除已停用的对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2011-08-04
      • 2021-07-22
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多