什么是NSFrozenDictionaryM?

0rt*_*0rt 11 xcode objective-c

我在调试应用程序时遇到了NSFrozenDictionary.

NSFrozenDictionary

声明为的共享索引属性 NSDictionary * sharedIndex = ...

它是什么?它与NSMutableDictionary的不同之处是什么?

Zhi*_* An 8

它被NSMutableDictionary标记为不可变的。

一种情况__NSFrozenDictionaryM

  1. 有一系列可变的字典:

    NSArray *array = @[{NSMutableDictionary}, {NSMutableDictionary}, {NSMutableDictionary}]

  2. 通过以下方法制作两层的深层副本:

    NSArray *res = [[NSArray alloc] initWithArray:array copyItems:YES]

结果res数组包含array类型为的NSMutableDictionaries的不可变副本__NSFrozenDictionaryM。我想这是一种优化,可以避免真正复制原始数组中的所有字典。


Ste*_*sen 3

它是属于NSDictionary 类簇一部分的具体子类之一。

Apple 的文档网站上有更学术的描述。

本质上:不用担心。如果您将其声明为 plain NSDictionary,则将其视为:不可变的字典。Foundation 可能会出于优化目的在幕后创建其他内容,但就您的代码而言,它仍然是一个不可变的字典。