哈希表中的ARC弱引用

时间:2013-04-03 18:46:33

标签: objective-c memory-management automatic-ref-counting hashtable

我使用NSHashTable来存储对象的弱引用。当散列表中的对象被释放并且引用在散列表中归零时,指向nil的指针仍然驻留在散列表中,对吗?所以随着时间的推移,如果没有直接从哈希表中删除被解除分配的对象,哈希表的大小会继续增长吗?现在,没有简单的方法向控制哈希表的对象发送通知,其中一个哈希表元素已被删除(这是一个游戏,其中反馈调用意味着对象之间的通信非常间接,并且最好保持这种方式) 。我应该定期迭代哈希表以删除无引用吗?

2 个答案:

答案 0 :(得分:7)

这个问题是几个月前发布的,但是为了记录,NSHashTable 确实删除已发布的弱引用。所以要回答实际问题,不,你不需要定期迭代哈希表。

答案 1 :(得分:1)

我会创建一个管理器类,负责添加和删除您正在谈论的对象。因此,我将通过以下几种方式之一通知哈希表:

  • 直接通过方法调用(当管理员引用哈希表时)
  • 间接使哈希表成为管理者的委托对象
  • 间接注册哈希表以观察管理器中的任何添加/删除操作
  • 间接让管理员向通知中心发送通知,通知由哈希表监听

这完全取决于你是如何将这些对象绑定在一起的,以及哪种模型适合最实际的设计。