gpt4 book ai didi

objective-c - NSMapTable 和 NSMutableDictionary 的区别

转载 作者:太空狗 更新时间:2023-10-30 03:21:39 27 4
gpt4 key购买 nike

NSMapTable 是否与 NSMutableDictionary 相同,只是允许键为指针?

它在内存管理上有什么不同吗?

最佳答案

NSMapTable 比 NSDictionary 更灵活。虽然 NSDictionary 为值保留强引用并复制键,但您可以将 NSMapTable 配置为具有独立于对象和值的任何这些行为:强、弱或复制(存在更多行为选项)。


一个实际用例:NSDictionary 保持对值指针的强引用(保留),但复制键。这意味着 a) 关键实例必须实现 NSCopying 协议(protocol)和 b) 根据类的复杂性,复制可能会增加开销。另一方面,您可以将 NSMapTable 配置为像 NSDictionary 一样,对值 键使用强引用,不需要复制或 NSCopying 协议(protocol)。

An object-to-object behavior could previously be emulated using an NSDictionary if all the keys were NSNumbers containing the memory address of the source object in the mapping (don't laugh, I've seen it done) but outside of this run-around, NSMapTable offers a true object-to-object mapping for the first time in a Cocoa collection class.

(From a great article covering NSMapTable when it was introduced.)

让我们看一下 API。这将返回一个与 NSMutableDictionary 非常相似的对象:

[NSMapTable mapTableWithKeyOptions:NSMapTableCopyIn
valueOptions:NSMapTableStrongMemory]

这将返回一个不复制键的有效对象:

[NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory
valueOptions:NSMapTableStrongMemory]

注意:看起来 NSMapTable API 在最近的 SDK 中发生了变化,但这种语法似乎与所有 SDK 兼容。

NSMapTable 适用于 OS X 10.5+ 和 iOS 6.0+。

关于objective-c - NSMapTable 和 NSMutableDictionary 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com