提问人:stefanosn 提问时间:10/24/2021 更新时间:10/24/2021 访问量:169
NSString 是什么类型,有多少字节?
What type is NSString and how many bytes?
问:
我是目标 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 的类型是什么?int、float、long、long double?
答:
字节的长度为您提供使用指定编码的文本内容的长度。在本例中,字符串包含一个字符,该字符在 UTF8 中编码为 1 个字节。
为您提供变量类型的大小,在本例中,该类型是指向 的指针。64 位体系结构上所有指针的大小为 8 个字节。它本质上是存储数据的内存地址的大小。 不是一个方法,它甚至不是一个函数。这是一个操作员。结果在编译时是已知的。sizeof
NSString
NSString
sizeof
换言之:
实际的字符串内容以不透明的格式存储在内存中,您不应该感兴趣。
在内存中的另一个位置,有一个包含指向内容的指针的数据结构。您可以使用以下命令获得此结构的大小(实际上大小会因具体子类而异,例如等)。
NSString
sizeof(NSString)
NSString
NSMutableString
NSPlaceholderString
变量包含指向 的指针,即其大小为 ,始终为 8 个字节。
NSString
sizeof(NSString*)
sizeof
算子不应该让你对 Objective-C 感兴趣,除非你正在处理指针算术,这应该是相当罕见的。
评论
NSString
NSString
NSString
sizeof(NSString*) + sizeof(NSString) + 1
评论