NSString是什么类型?lengthOfBytesUsingEncoding和sizeof返回字节数为何不同
问题解答
两个输出结果的核心区别
sizeof(test)返回8字节:sizeof是C语言的编译时运算符,计算的是变量本身占用的内存空间大小。你定义的test是NSString *类型,也就是Objective-C对象指针,在64位系统下所有指针类型的大小都是固定8字节,和指针指向的实际内容没有任何关系,哪怕你把test赋值为更长的字符串、甚至赋值为nil,sizeof(test)的结果永远是8;如果是32位运行环境,指针大小为4字节,对应的返回结果就会是4。lengthOfBytesUsingEncoding:NSUTF8StringEncoding返回1字节:这是NSString提供的实例方法,计算的是字符串的内容用指定编码(这里是UTF-8)转成字节序列后,实际占用的字节数。你测试的内容是英文字母a,UTF-8编码下单个英文字母刚好占用1字节,所以返回1。如果测试内容是中文,比如@"测试",这个方法的返回值就是6,因为UTF-8编码下单个常见中文占用3字节。
NSString的实际类型
NSString不属于int、float、long、long double这类C语言基础数值类型,它是Objective-C runtime定义的对象类,所有Objective-C对象都只能通过指针持有和访问,你写的NSString *test本质就是一个指向NSString类实例内存地址的指针。
内容的提问来源于stack exchange,提问作者stefanosn
相关产品推荐
相关产品推荐

