objective-c - NSSet 实现

标签 objective-c cocoa nsset

这个问题只是出于好奇,但是 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/

相关文章:

iphone - 判断当前本地时间是否在两个时间之间(忽略日期部分)

ios - ALAssetsLibrary无效或为null

objective-c - NSCharacterSet - 添加另一个字符集

swift - OS X 上的 SystemStatusBar statusItem 标题被缩短

cocoa - 在 Swift 中创建唯一成员集合

ios - 即使对于有效的 indexPath,在 reloadRowsAtIndexPaths 之后并不总是调用 cellForRowAtIndexPath

ios - 为什么 Storyboard约束会自动更改?

objective-c - NSBox 对焦环?

ios - 使用 NSSet 关系填充 cellForRow

iphone - 如何在 UITableView 中显示 NSSet?