NSHashTable 计数错误地报告非空
Posted
技术标签:
【中文标题】NSHashTable 计数错误地报告非空【英文标题】:NSHashTable count incorrectly reports non-empty 【发布时间】:2015-04-26 16:13:58 【问题描述】:我正在使用一个弱对象 NSHashTable,它报告计数为 1,即使它是空的。以下是显示我的案例的 lldb 输出。
p [__operationWaitList count]
(NSUInteger) $4 = 1
p [__operationWaitList.allObjects count]
(NSUInteger) $7 = 0
我最好的猜测是count
计算存储在 NSHashTable 中的弱引用的数量而不是有效对象的数量。但是,通过调用 allObjects,我取消了指向发现没有有效对象的指针,因此结果对象数组为空。
我想确认这一点,因为在这一点上文档有点缺乏。
【问题讨论】:
__operationWaitList
是如何创建的?请发布此代码。
这种情况是否只发生在 LLDB 中,还是您运行代码中的问题?
__operationWaitList = [NSHashTable weakObjectsHashTable];
执行时也会出现问题。
【参考方案1】:
实验结果,非详尽测试,建议:
您的观察是正确的,count
返回哈希表中当前的引用数,其中一些可能为空。
正如您所观察到的,allObjects.count
始终返回非空引用的数量。
添加新的不同对象似乎可以清除空引用。
关于这个问题的文档不清楚。
建议您向 Apple 提交错误报告,他们应该修复实现或文档。
【讨论】:
感谢您的确认。 Apple 对此错误做出了回应,并坚称该行为符合预期。他们为文档修复打开了一个错误,但可以更好地解释该行为。它们还表明对allObjects
的两次调用可能导致对象留在自动释放池中。以上是关于NSHashTable 计数错误地报告非空的主要内容,如果未能解决你的问题,请参考以下文章