NSMutableDictionary的默认容量是多少?

时间:2017-07-13 23:21:10

标签: ios objective-c nsdictionary

基本上当你打电话

[[NSMutableDictionary alloc] init];

Apple将创建一些默认大小的字典。什么是默认大小?

1 个答案:

答案 0 :(得分:1)

有趣的是,在iOS上,至少看起来Apple对init做同样的事情,好像它是initWithCapacity:0。我在仪器下运行了以下代码:

int max=1000000;
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:max];
for(int i=0; i < max; i++) {
    [array addObject:[[NSMutableDictionary alloc] init]];
}
if(true) return array;  // Don't let the compiler remove the ref

接下来我做了一些非常相似的事情,但明确指定了0容量:

int max=1000000;
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:max];
for(int i=0; i < max; i++) {
    [array addObject:[[NSMutableDictionary alloc] initWithCapacity:0]];
}
if(true) return array; // Don't let the compiler remove the ref

这两款产品在iOS 9设备上的最大耗电量为55.3 MB。然后我尝试在创建词典时使用initWithCapacity:1:

int max=1000000;
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:max];
for(int i=0; i < max; i++) {
    [array addObject:[[NSMutableDictionary alloc] initWithCapacity:1]];
}
if(true) return array; // Don't let the compiler remove the ref

在这种情况下,我的最大消费量是116.4 MB。

正如其他评论者所指出的,这可能因操作系统而异,甚至可能因版本而异。不要依赖它,但这是告诉NSMutableDictionary init正在做什么的一种方式。