Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在转换为大写/小写之前,是否需要将UTF8String作为消息来准备字符串对象?_Objective C - Fatal编程技术网

Objective c 在转换为大写/小写之前,是否需要将UTF8String作为消息来准备字符串对象?

Objective c 在转换为大写/小写之前,是否需要将UTF8String作为消息来准备字符串对象?,objective-c,Objective C,我对作为消息的UTF8String的理解是,它是非类消息,用于将NSString对象转换为C字符串,可以使用%s格式说明符打印 我认为它用于其他上下文,而不是将NSString对象更改为C字符串,然后再将其更改为大写或小写 但是,在将NSString对象转换为大写或小写之前,是否绝对有必要使用它将string对象转换为C字符串? 另外,如果不是,正如下面的代码所示,为什么在第一个示例中使用它而在第二个示例中不使用它 感谢您对理解此内容的帮助。。。作为一个学习者,我不想跳过一些东西 让我好奇的代码

我对作为消息的
UTF8String
的理解是,它是非类消息,用于将NSString对象转换为C字符串,可以使用
%s
格式说明符打印

我认为它用于其他上下文,而不是将
NSString
对象更改为
C
字符串,然后再将其更改为大写或小写

但是,在将NSString对象转换为大写或小写之前,是否绝对有必要使用它将string对象转换为C字符串? 另外,如果不是,正如下面的代码所示,为什么在第一个示例中使用它而在第二个示例中不使用它

感谢您对理解此内容的帮助。。。作为一个学习者,我不想跳过一些东西

让我好奇的代码是我在S.Kochan的优秀Objective-C书中遇到的:

NSString *str1 = @"This is string A";
NSString *str2 = @"This is string B";
NSString *res;

...

res = [str1 uppercaseString];
NSLog [@"Uppercase conversion: %s", [res UTF8String]);
在转换为小写字母的示例中未使用:

res = [str1 lowercaseString];
NSLog (@"Lowercase conversion: %@", res];

-UTF8String
方法返回UTF-8编码中的C样式字符串(指向字符缓冲区的指针,以空字符结尾)。这就是它的目的,任何将其用于其他目的的企图都是错误的

调用
-UTFString
是否会以某种方式修改接收器是一个实现细节,您不应该担心。(在任何对象
NSString
不可变之前,这只意味着它所表示的字符串不会改变。这并不一定意味着该对象是位常量。例如,它可以在不违反不可变性的情况下进行内部缓存。)

转换为小写或大写与调用
-UTFString
完全无关

如果您要在以下两者之间进行选择:

NSLog(@"some string: %s", [res UTF8String]);
以及:

我更喜欢后者。前者试图规定如何将字符串转换为字符流,强制转换为UTF-8(可能不需要),等等。后者更直接、更简单地表达您的意图,并将最大的自由度留给框架来正确、高效地实现


只有在需要UTF-8编码的C样式字符串的情况下,才调用
-UTF8String

当您实际上不希望使用UTF-8编码的字符的C字符串时,调用UTF8String会浪费代码、时间和空间。它没有任何好处。线路

NSLog [@"Uppercase conversion: %s", [res UTF8String]);
这太愚蠢了

NSLog [@"Uppercase conversion: %@", res);
更简单,不会浪费空间来无意义地分配UTF-8字符串

NSLog [@"Uppercase conversion: %@", res);