首页 > 解决方案 > NSString 是什么类型,有多少字节?

问题描述

我是目标 c 的新手。试图找出目标 C 中 NSString 的类型。我使用 C 中的 sizeof() 方法和使用 NSString 中的 UTF8 编码的 lengthOfBytesUsingEncoding 方法。

NSString *test=@"a";

NSLog(@"LengthOfBytesUsingEncoding: %lu bytes", [test lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);

printf("NSString: %lu\n", sizeof(test));

这将在控制台中给我

LengthOfBytesUsingEncoding:1 个字节NSString:8 个字节

这两个结果有什么区别?为什么 LengthOfBytesUsingEncoding 返回 1 个字节而 sizeof 方法返回 8 个字节?NSString 的类型是什么?整数、浮点数、长整数、长整数?

标签: iosobjective-cnsstring

解决方案


字节长度为您提供使用指定编码的文本内容的长度。在这种情况下,字符串包含一个字符,在 UTF8 中被编码为 1 个字节。

为您提供变量类型的sizeof大小,在本例中是指向NSString. 64 位架构上所有指针的大小为 8 字节。它本质上NSString是存储数据的内存地址的大小。sizeof不是方法,甚至不是函数。是运营商。结果在编译时是已知的。

换句话说:

  1. 实际的字符串内容以不透明且您不应该感兴趣的格式存储在内存中。

  2. 在内存的另一个地方,有NSString一个包含指向内容的指针的数据结构。sizeof(NSString)您可以使用(实际上大小会因具体NSString子类而异,例如NSMutableStringNSPlaceholderString)获得此结构的大小。

  3. 您的变量包含一个指向 的指针NSString,即它的大小为sizeof(NSString*),始终为 8 个字节。

sizeof运算符不应该让您对 Objective-C 感兴趣,除非您正在处理指针算术,这应该是相当罕见的。


推荐阅读