0rt*_*0rt 11 xcode objective-c
我在调试应用程序时遇到了NSFrozenDictionary.
声明为的共享索引属性 NSDictionary * sharedIndex = ...
它是什么?它与NSMutableDictionary的不同之处是什么?
它被NSMutableDictionary标记为不可变的。
一种情况__NSFrozenDictionaryM:
有一系列可变的字典:
NSArray *array = @[{NSMutableDictionary}, {NSMutableDictionary}, {NSMutableDictionary}]
通过以下方法制作两层的深层副本:
NSArray *res = [[NSArray alloc] initWithArray:array copyItems:YES]
结果res数组包含array类型为的NSMutableDictionaries的不可变副本__NSFrozenDictionaryM。我想这是一种优化,可以避免真正复制原始数组中的所有字典。
它是属于NSDictionary 类簇一部分的具体子类之一。
Apple 的文档网站上有更学术的描述。
本质上:不用担心。如果您将其声明为 plain NSDictionary,则将其视为:不可变的字典。Foundation 可能会出于优化目的在幕后创建其他内容,但就您的代码而言,它仍然是一个不可变的字典。