objective-c中的非引用计数字典

Col*_*lin 5 objective-c

有没有"简单"的方法来使用纯粹的objective-c容器,例如NSMutableDictionary或CFMutableDictionary,它们不增加添加对象的引用计数,而不使用c ++标准库?

编辑:解释 - 我想要这个的原因是我可以实现一种"Exactly One"模式 - 一个类将有一个静态getThing:(NSString*)名称方法.如果该方法在某些静态数据结构(非引用计数字典)中找到与名称关联的Thing,则返回它,否则创建一个,将其添加到该名称下的结构中,然后返回它.客户端可以随意保留Thing对象,但是当它的引用计数降为0(并且调用dealloc)时,它应该从字典中删除.因此,我无法在添加时释放它并在删除时再次保留它 - dealloc会再次被调用,而我不希望这样.这就是我需要非递增字典的原因.如果有另一种方法可以得到我想要的东西,请告诉我,虽然我 我很确定,经过检查的答案能给我我想要的东西.谢谢!

Lau*_*ble 3

如果您正在针对 MacOSX 进行开发,那么您可以使用NSMapTable。请参阅 Mike Ash 的这篇博客文章以了解更多信息。

如果您正在为 iPhone 进行开发,那么您可以将CFMutableDictionary与自定义回调结构一起使用:

  • kCFTypeDictionaryKeyCallBacks将和结构复制kCFTypeDictionaryValueCallBacks到新的结构中。
  • retain将和字段设置release为 NULL,无需保留/释放(键和/或值)。
  • 调用时传递结构CFDictionaryCreateMutable

这样,你将拥有一个既不保留也不释放的字典。