3

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

4

2 回答 2

8

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

于 2013-11-20T09:15:42.583 回答
1

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

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

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

于 2013-04-03T18:56:57.803 回答