这个问题只是出于好奇,但是,nsset是如何实现的呢?它背后的数据结构是什么?添加和删除元素的访问时间是多少?如果我不得不猜测,我会说它是某种哈希表/字典数据结构,但在这种情况下,为什么要区分nsset和nsmutableset?
最佳答案
好吧,正如bavariance在评论中指出的,苹果的corefoundation的实际来源也是open and available for your perusal。NSSet
是在CFSet
之上实现的,其代码是从哈希表模板生成的(与CFDictionary
的代码一样),使用CFBasicHash
来完成工作。
变异性和不变性之间的区别似乎是结构中的一个标志(第91行的AA>),从我的阅读至今,只影响到对函数的调用,例如CFBasicHash.h
;有一个简单的检查可变性。然而,cobbal关于两者之间的复制/保留行为似乎是正确的(我只是还没有读到那么多)。
以前:
当我想了解具体细节时,偶尔会发现有趣的、有教育意义的“AA>源”。当然,它们根本不能保证以苹果那样的方式实现,但在某些情况下,它们可能会有所帮助。他们的基金会版本:CFBasicHashAddValue
(我希望这是最新的版本。如果没有,请有人纠正我。)
关于objective-c - NSSet实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5863510/