Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing an NSString

Tags:

objective-c

What's the correct way to print an NSString in Objective-C? A lot of examples use NSLog(), but according to the documentation:

NSLog is a FoundationKit function for printing debug statements to the console. ... NSLog works basically like: fprintf(stderr, format_string, args ...);

Which to me is a bit like the _TRACE macro in Win32/C++. I don't want to print to stderr, I want to print to stdout. There are people who suggest using printf() as follows:

printf("%s", [str cStringUsingEncoding:NSUTF8StringEncoding]); 

But this seems like an extra level on indirection to get the NSString printed, and it doesn't "feel" like the solution.

like image 828
ta.speot.is Avatar asked Feb 07 '10 07:02

ta.speot.is


People also ask

How do I print a string in Objective C?

You can use %@ for all objects including NSString. This will in turn call the objects description method and print the appropriate string.

How do I print text in Xcode?

In Swift with Xcode you can use either print() or NSLog() . print() just outputs your text.

Do I need to release NSString?

If you create an object using a method that begins with init, new, copy, or mutableCopy, then you own that object and are responsible for releasing it (or autoreleasing it) when you're done with it. If you create an object using any other method, that object is autoreleased, and you don't need to release it.

What is a NSString?

A static, plain-text Unicode string object that bridges to String ; use NSString when you need reference semantics or other Foundation-specific behavior.


1 Answers

Spewing stuff to stdout is actually a pretty rare thing to do in Cocoa, given that almost all projects are GUI in nature. There are relatively few projects that are built as command line tools or otherwise need to deal with stdout.

However, the Foundation does provide the means to write to stdout. Specifically, NSFileHandle has fileHandleWithStandardOutput which gives you a file handle that can write to stdout.

From there, it is a matter of converting the NSString to an NSData and writing it.

Quite a few steps, but easily wrapped up in a reusable function:

void MyLog(NSString *format, ...) {     va_list args;     va_start(args, format);     NSString *formattedString = [[NSString alloc] initWithFormat: format                                                   arguments: args];     va_end(args);     [[NSFileHandle fileHandleWithStandardOutput]         writeData: [formattedString dataUsingEncoding: NSNEXTSTEPStringEncoding]];     [formattedString release]; } 
like image 54
bbum Avatar answered Oct 08 '22 12:10

bbum