iOS:数据类型分配的内存消耗

时间:2013-07-25 18:25:16

标签: ios objective-c

这可能是一个基本问题,但只是很想知道答案。在我们的iOS Obj C程序中创建每个变量(如int,NSString,NSDictionary,NSData等)时将占用多少内存。我希望,它会与基于数据类型(或)大小的C程序类似吗?

谢谢!

5 个答案:

答案 0 :(得分:3)

总之,你不能。至少不是有用的方式。

几乎每个类都有任意数量的分配,这些分配不会直接记入实例的分配。同样,许多类 - NSDictionaryNSArrayNSString - 实际上是类集群的一部分,因此,实际分配的是一个子类。最后,对于各种集合和数据类,相关分配的大小将根据其内容而大不相同。某些类 - UIImageNSData等 - 可能包含实际上没有由堆分配表示的数据MB,因为它们是从文件系统映射数据。

或者,总而言之,class_getInstanceSize()毫无用处。

相反,您需要关注应用程序的内存使用情况,作为其操作行为的系统特征。分配工具可以很好地衡量内存使用情况,更重要的是,可以帮助您确定负责消费的内容。

答案 1 :(得分:2)

您应该将Objective-C对象的大小视为您不能依赖的实现细节。从一个环境到另一个环境,它们可能恰好是一致的,但它们并不能保证这一点。此外,没有一致和完整的方法来衡量它们的大小,因为它们可以以各种聪明的方式实施。

如果您需要精确管理内存分配,只需使用C类型,这些类型本身就是完全有效的Objective-C。

答案 2 :(得分:1)

你可以通过调用它来获得任何类的大小,例如:

#import "objc/runtime.h"
int size = class_getInstanceSize([NSDictionary class]);

答案 3 :(得分:1)

这取决于你想要放入这个类的内容(NSString,NSDictionary,NSData)。你可以说NSMutableString等改变了他们的大小,但他们只是重新分配自己。

答案 4 :(得分:1)