这可能是一个基本问题,但只是很想知道答案。在我们的iOS Obj C程序中创建每个变量(如int,NSString,NSDictionary,NSData等)时将占用多少内存。我希望,它会与基于数据类型(或)大小的C程序类似吗?
谢谢!
答案 0 :(得分:3)
几乎每个类都有任意数量的分配,这些分配不会直接记入实例的分配。同样,许多类 - NSDictionary
,NSArray
,NSString
- 实际上是类集群的一部分,因此,实际分配的是一个子类。最后,对于各种集合和数据类,相关分配的大小将根据其内容而大不相同。某些类 - UIImage
,NSData
等 - 可能包含实际上没有由堆分配表示的数据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)