我如何知道某些字典会占用多少内存?
我问这个是出于以下原因。
我可能有一个包含三个键和对象的字典。这是我的字典样本。
One Dictionary (sample)
---------
key:"questionPath" Object:"image1.png"
key:"correctAnswer" Object:"1"
key:"totalAnswers" Object:"6"
这个词典代表了一个单一的测验问题,你可能会在我想写的应用程序中猜到。
由于可能有1000个问题,我可能需要将这1000个字典从plist加载到数组。 (然后从数组中逐个查询问题)。
你认为这会消耗太多内存吗?
当像项目中的资源一样加载图像时,我是否应该在从代码引用时使用它们的名称? (如我上面的样本)
答案 0 :(得分:0)
您可以使用探查器检查内存使用情况。在Xcode中:产品>轮廓。然后检查Allocations
。无论如何,即使它适合,让内存中的所有东西都不可扩展,所以我想一下CoreData
方法,这将使你的内存使用速度慢得多。
答案 1 :(得分:0)
编写一个简单的应用程序并创建一个循环,创建1000个相同的对象(使用与上面列出的相同的值)。将这些对象添加到NSMutableArray等集合中,以便它们保持不变。然后使用Instruments检查内存使用情况。当所有问题都加载到内存中时,这可以让您大致了解应用程序的内存需求。
您可能只会在给定时间访问一小部分问题。更有效的解决方案是将问题数据留在文件系统中,直到内存中实际需要为止。 CoreData是Apple为此提供的一种解决方案。或者您可以使用NSCoder并将每个问题存储在自己的二进制文件中,以实现更简单,可扩展,内存效率更高的实现。
以下是NSCoder类的Apple文档:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/Reference/NSCoder.html
该页面包含示例代码的链接。
将NSCoder视为将集合(例如NSArray,NSDictionary)保存到磁盘或从磁盘加载的简单方法。因此,在您的情况下,您可以拥有一个名为question1.data的文件,最高可达问题1000.data,NSCoder提供了一个简单的界面,可在需要时加载该数据。只需确保在不再需要时丢弃问题数据,或者您的应用程序将始终增加其内存使用量并且不会缩小它。