NSString 是什么类型,有多少字节?

What type is NSString and how many bytes?

我是 objective c 的新手。试图找出 Objective 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 returns 1 个字节和 sizeof 方法 returns 8 个字节? NSString 的类型是什么?整数、浮点数、长整数、长双精度?

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

sizeof 给出变量类型的大小,在本例中是指向 NSString 的指针。 64 位架构上所有指针的大小都是 8 个字节。它本质上是内存地址的大小,其中存储了 NSString 数据。 sizeof 不是方法,甚至不是函数。它是一个操作员。结果在编译时已知。

换句话说:

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

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

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

sizeof 运算符你应该不会对 Objective-C 感兴趣,除非你正在处理指针算法,这应该很少见。