我很困惑。什么是NSData的sizeof
和.length
之间的差异。长度是一个字符数?对?但这是否意味着sizeof?任何人都可以更准确地解释我PLZ
答案 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}} - 指针的大小:)