这个问题只是出于好奇,但是 NSSet 是如何实现的?它背后是什么数据结构,添加和删除元素的访问时间是多少?如果非要我猜的话,我会说它是某种哈希表/字典数据结构,但在那种情况下,为什么要区分 NSSet 和 NSMutableSet?
最佳答案
好吧,正如 Bavarious 在评论中指出的那样,Apple 的实际 CoreFoundation 来源是 open and available for your perusal也。 NSSet
是在 CFSet
之上实现的, 其代码是从哈希表模板生成的(与 CFDictionary
一样),使用 CFBasicHash
做这项工作。
可变性和不可变性之间的区别似乎是结构中标志的问题(CFBasicHash.h
的第 91 行),到目前为止,从我的阅读来看,只影响对 CFBasicHashAddValue
等函数的调用;有一个简单的可变性检查。然而,Cobbal 似乎对两者之间的复制/保留行为是正确的(我还没有读到那么多)。
以前:
我发现偶尔仔细阅读 GNUstep 很有趣并且很有教育意义当我想知道实现细节时。当然,它们完全不能保证像 Apple 那样实现,但在某些情况下它们会有所帮助。他们的基金会版本:http://gnu.ethz.ch/debian/gnustep/gnustep-base-1.20.0/Headers/Foundation/ (我希望这是最新的版本。如果不是,请有人纠正我。)
关于objective-c - NSSet 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863510/