GitHub 中文社区

NSMapTable官方文档阅读

2017-06-14  本文已影响727人  AppleTTT

NSMapTable

应朋友邀约,翻译关于 NSMapTable 和 NSHashTable 的官方文档,本篇是第一篇。

Overview

NSMapTable 是在 NSDictionary 之后的一个可变集合模型化的类,它们具有以下区别:

1. 主要的差别是 NSMapTable 会在集合里的对象被回收的时候删除此对象来保持对键 和/或 值保持“弱引用”;
2. 当 NSMapTable 添加一个键值对的时候其键或值可以被复制,也可以使用指针标识来进行相等和散列判断;
3. NSMapTable 可以包含任意指针(其内容不被约束为对象)。

你可以将 NSMapTable 实例配置为对任意指针进行操作,而不仅仅是对象,尽管通常会鼓励使用 C 的 API: void * 指针来操作。 (有关详细信息,请参阅管理映射表)基于对象的 API(例如 setObject:forKey :)将无法在不进行类型转换的情况下对无对象指针操作。

配置映射表时,请注意,只有NSMapTableOptions中列出的选项才能保证其余的API能够正常工作,包括复制,归档和快速枚举。虽然其他NSPointerFunctions选项用于某些配置,例如保留任意指针,但并不是所有选项的组合都有效。使用某些组合时映射表可能无法正常工作,甚至可能无法正确初始化。

NOTE: NSMapTable不适用于子类化。

Symbols

Creating and Initializing a Map Table







Accessing Content




Manipulating Content



Creating a Dictionary Representation

Accessing Pointer Functions


Constants

Symbols
  1. NSMapTableStrongMemory

    指定对映射表中对应内容的强引用。
    等同于NSPointerFunctionsStrongMemory;

  2. NSMapTableZeroingWeakMemory

    指定对映射表中对应内容的归零弱引用。
    这并不完全等同于上面的选项的行为。 在手动和自动引用计数下,对象必须是弱引用安全的; 但是不是所有的对象都是这样的。

  3. NSMapTableCopyIn

    允许对映射表中的项目进行分配内存和复制的操作;
    等同于NSPointerFunctionsCopyIn;

  4. NSMapTableObjectPointerPersonality

    选项用于控制在将对象添加到集合中时是否调用对象上的 isEqualTo: 和 hash
    方法
    等同于NSPointerFunctionsObjectPointerPersonality

  5. NSMapTableWeakMemory

    指定使用弱引用和读写屏障;
    等同于NSMapTableZeroingWeakMemory.

参考

建议配合这篇文章NSMapTable: 不只是一个能放weak指针的 NSDictionary一起阅读,里面有关于每个选项的详细解释

上一篇 下一篇

猜你喜欢

热点阅读