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
不是方法,甚至不是函数。它是一个操作员。结果在编译时已知。
换句话说:
实际的字符串内容以不透明的格式存储在内存中,您不应该感兴趣。
在内存的另一个地方,有 NSString
包含指向内容的指针的数据结构。您可以使用 sizeof(NSString)
获取此结构的大小(实际上大小会根据具体的 NSString
子类而有所不同,例如 NSMutableString
、NSPlaceholderString
等)。
您的变量包含一个指向 NSString
的指针,即它的大小为 sizeof(NSString*)
,始终为 8 个字节。
sizeof
运算符你应该不会对 Objective-C 感兴趣,除非你正在处理指针算法,这应该很少见。
我是 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
不是方法,甚至不是函数。它是一个操作员。结果在编译时已知。
换句话说:
实际的字符串内容以不透明的格式存储在内存中,您不应该感兴趣。
在内存的另一个地方,有
NSString
包含指向内容的指针的数据结构。您可以使用sizeof(NSString)
获取此结构的大小(实际上大小会根据具体的NSString
子类而有所不同,例如NSMutableString
、NSPlaceholderString
等)。您的变量包含一个指向
NSString
的指针,即它的大小为sizeof(NSString*)
,始终为 8 个字节。
sizeof
运算符你应该不会对 Objective-C 感兴趣,除非你正在处理指针算法,这应该很少见。