![](/img/trans.png)
[英]What is the difference between NSMutableDictionary and CFDictionaryRef?
[英]What is the default capacity of NSMutableDictionary?
基本上你打電話的時候
[[NSMutableDictionary alloc] init];
Apple將創建一些默認大小的字典。 什么是默認大小?
有趣的是,在iOS上至少看起來蘋果對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正在做什么的一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.