如何在iOS / Cocoa中找到集合对象的内存占用量

时间:2012-08-06 11:34:38

标签: objective-c ios cocoa-touch memory-management collections

我正在滚动自己的对象缓存。它基本上是一个NSMutableSet。

有没有办法找出(以编程方式)集合当前使用的内存量,这样我就可以触发一些不太重要的对象的清除?

3 个答案:

答案 0 :(得分:4)

定义“集合”。用于维护集合的结构的大小?对象指针的大小?对象包含的实例变量的大小?

您可以根据需要清除内存警告数据。

使用Objective-C运行时方法来查找对象的实例变量使用了多少内存class_getInstanceSize,尽管我不认为这是正确的方法。保存带有5 MB数据的单个NSData的一个对象的时钟频率低于具有两个NSStrings的对象。

因为我不知道你为什么要自己编写缓存,所以我会这样做。我会定义一种方法来计算我保留的​​项目的比例成本。 (对于图像,我们说宽度*高度。)然后我会使用NSCache,它支持为每个对象提供成本,保持最大成本并自动清除。

答案 1 :(得分:1)

据我所知,没有任何内置可以解决这个问题。 class_getInstanceSizesizeofmalloc_size不提供可靠的方法,因为它们会为您提供空对象或甚至是对象指针的大小。这意味着如果您采用这些方法中的任何一种,十个字符的字符串大小和一百个字符的字符串大小将相同。

通过检查对象的序列化大小,可以更好地逼近对象的内存大小,但是集合中的对象需要符合NSCoding才能使其正常工作。您可以实现NSCoder的实现,该实现计算已传递给它以进行序列化的数据的总大小,而无需“为实际”序列化数据。将此编码器传递给集合的encodeWithCoder:方法,然后收集集合中所有对象的总大小。

答案 2 :(得分:0)

sizeof()是一个方便的工具。

sizeof(object);

malloc_size(object);