有序字典 1.4

有序字典 1.4

测试已测试
Lang语言 Obj-CObjective C
许可证 zlib
发布最后发布2016年9月

Nick Lockwood 维护。



  • Nick Lockwood

目的

在 NSDictionary 中存储的对象顺序是未定义的。通常,能够遍历一系列键/值对,并按它们插入的顺序返回对象是非常有用的。这个库提供了两个类,OrderedDictionary 和 MutableOrderedDictionary,用于实现这种行为。

支持的 OS 及 SDK 版本

  • 支持的构建目标 - iOS 10.0 / Mac OS 10.11 (Xcode 8.0, Apple LLVM 编译器 8.0)
  • 最早支持的部署目标 - iOS 7.0 / Mac OS 10.9
  • 最早兼容的部署目标 - iOS 4.3 / Mac OS 10.6

注意:'支持'表示库已使用此版本进行测试。'兼容'表示库应在操作系统版本上工作(即它不依赖于任何不可用的 SDK 功能),但不再进行兼容性测试,可能需要调整或错误修复才能正确运行。

ARC 兼容性

OrderedDictionary 需要 ARC。如果想在非 ARC 项目中使用 OrderedDictionary,只需将 -fobjc-arc 编译器标志添加到 OrderedDictionary.m 类中。要做到这一点,请转到目标设置的构建阶段标签,打开编译源组,双击列表中的 OrderedDictionary.m,在弹出窗口中输入 -fobjc-arc。

如果您想将整个项目转换为 ARC,请取消注释 OrderedDictionary.m 中的 #error 行,然后在 Xcode 中运行 Edit > Refactor > Convert to Objective-C ARC... 工具,并确保所有要使用 ARC 的文件(包括 OrderedDictionary.m)都被选中。

线程安全性

对有序字典的访问固有地是线程安全的,因为它是不变的。对可变有序字典的访问在未确保没有线程在另一个线程写入字典的同时尝试从字典中读取时不是线程安全的。

安装

您可以通过 CocoaPods 或手动将 OrderedDictionary.h 和 .m 文件拖入您的项目中来安装 OrderedDictionary。

关于读取/写入属性列表的说明

NSDictionary 有一个方便的成对方法 initWithContentsOfFile:writeToFile: 从 plist 中读取/写入。由于 Apple 的属性列表解析器返回一个已经错乱顺序的 NSDictionary,因此无法支持这些原生实现。

然而,从版本1.4开始,OrderedDictionary 现在支持使用自定义解析实现从/到XML plist文件的读写,不支持二进制和ASCII plist文件。

警告: 当您将XML plist包含到项目中时,它将被编译为二进制plist(在实际发布模式中),这意味着即使您在使用OrderedDictionary成功加载此类文件时,这可能在最终的app中出现问题。有两种解决方法

  1. 将项目的构建设置中的《属性列表输出编码》从《二进制》更改为《XML》或《与输入相同》;
  2. 将您的".plist"文件扩展名重命名为"".xml"(或您选择的任何其他名称)

第二种方法的优点是不影响除OrderedDictionary使用的plist文件之外的文件,但这可能使得编辑文件更加不方便,因为Xcode不会将其识别为属性列表。

版本发布说明

版本1.4

  • 增加了从XML属性列表文件加载/保存OrderedDictionary的支持(不支持二进制文件)

版本1.3

  • 移除了从属性列表读取和写入的功能,因为这实际上并没有保留顺序(参见上面的注释)
  • 修复了与空OrderedDictionary相关的某些bug
  • 增加了对轻量级泛型的支持
  • 正确支持NSSecureCoding
  • 修复了在最新Xcode上的警告

版本1.2

  • 现在支持NSCoding
  • 添加了keyAtIndex:方法
  • 添加了replaceObjectAtIndex:withObject:和setObject:atIndexedSubscript:方法
  • 添加了exchangeObjectAtIndex:withObjectAtIndex:方法
  • setObject:forKeyedSubscript:现在可以使用非字符串键
  • 现在内部使用NSOrderedSet,以提供更好的性能
  • 添加了单元测试

版本1.1.1

  • 添加了enumerateKeysAndObjectsWithIndexUsingBlock:方法
  • 现在遵循-Weverything警告级别

版本1.1

  • 现在需要ARC
  • 更新以移除最新iOS中的警告
  • 移除了OrderedMutableDictionary变体
  • 现在符合- Wextra警告级别
  • 添加了podspec

版本1.0

  • 首次发布