这个问题只是出于好奇,但NSSet是如何实现的?它背后是什么数据结构以及添加和删除元素的访问时间是多少?如果我不得不猜测,我会说它是某种哈希表/字典数据结构,但在这种情况下为什么要区分NSSet和NSMutableSet?
好吧,正如Bavarious在评论中指出的那样,Apple的实际CoreFoundation源代码是开放的,也可供您阅读.NSSet
是在哈希表模板上CFSet
生成代码(用于生成代码CFDictionary
),CFBasicHash
用于完成工作.
可变性和不变性之间的区别似乎是结构中的一个标志问题(第91行CFBasicHash.h
),从我的阅读到目前为止只影响对函数的调用,如CFBasicHashAddValue
; 有一个简单的检查可变性.然而,似乎Cobbal对于两者之间的复制/保留行为是正确的(我还没有看到那么远).
以前:当我想知道实现细节时,我发现偶尔会仔细阅读GNUstep资源,这很有趣.当然,它们并不能保证以Apple的方式实现,但在某些情况下它们可能会有所帮助.他们的基金会版本:http://gnu.ethz.ch/debian/gnustep/gnustep-base-1.20.0/Headers/Foundation/(我希望这是最新的版本.如果没有,有人请指正.)