我正在从服务器检索大量数据,我必须快速初始化并取消分配NSMutableDictionary
。
我会使用核心数据,但要求说我必须使用一个已分配的对象来快速存储传入的JSON
数据,将其保存到NSUserDefaults
并完全删除它。这将在一段时间内在后台进程中多次发生。
测试是在iPhone 6S(不是模拟器)上进行的测试
我测试了一个完全裸露的"单视图应用程序"结果是:
你可以看到一块骨头"单一视图应用程序"消耗9MB内存。
然后我在NSMutableDictionary
上进行了测试。我的测试是用数据初始化,删除所有对象,然后恢复RAM。
字典存储了10,000个微小的值(viewDidLoad
- 用于测试目的):
_dictionary = [[NSMutableDictionary alloc] initWithDictionary:@{
@"Item00000" : [NSNumber numberWithInt:0],
...
@"Item10000" : [NSNumber numberWithInt:10000]}];
初始化后 - 我等了两秒钟,删除了所有对象并尝试删除NSMutableDictionary
。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[_largeDictionary removeAllObjects];
_largeDictionary = nil;
});
但不的内存消耗显示NSMutableDictionary
被删除:
有没有人能解决这个问题?我认为当Apple贬值autorelease
方法时,这就得到了解决。我的实时环境正在快速初始化相对较大的数据块每键值对 - 然后解除分配并准备下一个块。下一个块 可以 存储在不同的NSMutableDictionary
中。这就是为什么我需要从内存中完全删除第一个NSMutableDictionary
的原因。我已经看到很多关于这个问题的答案,但没有比2013年更新。
更新:此@property
为:(nonatomic, strong)
提前谢谢。