2011-06-07 96 views
1

我正在处理的项目需要我暂时在缓冲区中存储数百甚至数千个条目。简单的方法是将每个条目存储在NSDictionary中,并将所有条目存储在NSArray中。每个NSDictionary包含大约十几个对象(NSStrings和NSNumbers)。在整个操作过程中,NSArray及其字典仍留在记忆中,因此我的问题。NSDictionary和NSArray的内存占用情况

这是一个昂贵的操作在内存使用方面,什么是测试这个好方法?

+1

通过使用Apple的Core Data框架来存储数据,您将获得更低的内存使用量,即使只是暂时的。 – 2011-06-11 04:07:41

回答

2

仪器包含一个内存监控模块。在乐器的左下角,点击齿轮图标,然后选择添加乐器> Memory Monitory。 Apple's documentation应该可以帮助您了解如何使用仪器监视内存。另见this question

根据我的经验,NSDictionary和NSArray在内存使用方面都相当高效。我已经写了几个应用程序,它们存储了来自.csv或.xml文件的数千个键/值,并且随着NSDictionary被填满,内存使用量有一个相当线性的增加。我的建议是,如果您可以为它们构建单元测试,则可以在某些角落案例中使用“乐器”分析器。

我不知道我明白你为什么要在NSDictionary和NSArray中存储条目。

如果你想达到内存使用的上限,你可能需要考虑的一件事是将条目转换成SQLite数据库,然后索引你想查找的列。

编辑:如果你想深入了解iPhone的内存消耗,一定要检查this question

+0

感谢您的回复。过去我一直在使用仪器(并在发布此问题之前)。不幸的是,它并不是最简单的工具(或者解释它产生的结果),但它确实最适合这一点。 – 2011-06-07 01:49:19

+0

如果您有苹果开发者账户,请查看[去年的WWDC](http://developer.apple.com/videos/wwdc/2010/)关于仪器和优化ios上的内存。如果您快速了解仪器是如何工作的,那么确实值得一看。 – retrodrone 2011-06-07 01:54:02

1

Apple的集合类比您或我创建的效率更高,我不担心有数千个小条目的字典,请记住,将这些值添加到字典时不会复制,但键是。这只是说,只记得你需要什么。