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



我是新的目标c.试图找出NSString的类型在目标c.我使用sizeof()方法从c和lengththofbytesusingencoding方法使用UTF8编码从NSString。

NSString *test=@"a";
NSLog(@"LengthOfBytesUsingEncoding: %lu bytes", [test lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
printf("NSString: %lun", sizeof(test));

这会在控制台显示

LengthOfBytesUsingEncoding: 1 bytesandNSString: 8 bytes

两个结果有什么不同?为什么LengthOfBytesUsingEncoding返回1字节和sizeof方法返回8字节?NSString的类型是什么?Int, float, long, long double?

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

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

换句话说:

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

  2. 在内存的另一个地方,有一个NSString数据结构,包含指向内容的指针。你可以使用sizeof(NSString)来获得这个结构的大小(实际上大小取决于具体的NSString子类,例如NSMutableString,NSPlaceholderString等)。

  3. 你的变量包含一个指向NSString的指针,也就是说,它的大小是sizeof(NSString*),它总是8字节。

sizeof运算符在Objective-C中不应该引起你的兴趣,除非你在处理指针算术,这种情况应该是相当罕见的。

最新更新