NSData的sizeof和长度之间的差异

时间:2014-09-02 13:29:45

标签: objective-c nsarray nsdata

我很困惑。什么是NSData的sizeof.length之间的差异。长度是一个字符数?对?但这是否意味着sizeof?任何人都可以更准确地解释我PLZ

2 个答案:

答案 0 :(得分:4)

sizeof()是一个语言关键字,它返回一个类型的存储大小,并在编译时进行评估。

例如:

NSData *obj = [NSData data];
NSLog(@"%lu", sizeof(obj));

将在32位平台上打印4或在64位平台上打印8,因为obj是指针,这是指针在这些平台上占用的空间。

它与:

相同
NSLog(@"%lu", 4);

NSLog(@"%lu", 8);

取决于正在编译的平台。

但是NSData是一个存储数据的对象,它提供length方法,因此您可以查询当前存储的数据量。它在运行时进行评估。

NSLog(@"%lu", obj.length);

打印0,因为NSData对象为空。

答案 1 :(得分:0)

我不是iOS的专家,但我试着看一下。似乎.Length是"接收器中包含的字节数"。虽然.sizeof表示"整个NSData结构在内存中占用的实际字节数"。

在其他语言中,它的行为可能不同 - 即C#的字符串:length对于20个字符将是20,但是当C#使用Unicode时,sizof()将返回40.但是,其他对象可能表现得完全不同......

我认为在你的例子sizeof()中可能会返回两个可能的结果 - NSData内部结构占用的字节数(如指向真实数据的指针,计数器等)包含或不包含大小数据

我想最好的方法是尝试存储一些数据并比较两种方法的输出:)如果NSData只是指针 - .sizeof的结果只是4或{{ 1}} - 指针的大小:)