What I understand about `UTF8String` as a message is that it is a non-class message, and it is used to convert an NSString object to a C string which can be printed by using the `%s` format specifier. 

I think it is used in other contexts other than when changing an `NSString` object into a `C` string ahead of then changing it to upper or lower case, for example.

But is it absolutely necessary to use it to convert a string object into a C string before you convert the NSString object to uppercase or lowercase?
Also, if it isn't, as the code below suggests, why is it used in first example and not in the second?

Appreciate any help in understanding this... don't want to skip by stuff as a learner.

The code that made me wonder about it is this which I came across in the excellent Objective-C book by S. Kochan:

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

...

res = [str1 uppercaseString];
NSLog [@"Uppercase conversion: %s", [res UTF8String]);

```

It isn't used in the conversion to lowercase example:

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

```