打印NSString

在Objective-C中打印NSString的正确方法是什么?许多示例使用NSLog(),但根据文档:打印NSString

NSLog是一个将调试语句打印到控制台的FoundationKit函数。 ... NSLog基本上像这样: fprintf(stderr,format_string,args ...);

这对我来说有点像Win32/C++中的_TRACE宏。我不想打印stderr,我想打印到stdout。还有谁建议使用printf的人()如下:

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

但是,这似乎是在间接的额外水平得到NSString的印刷,它不“感觉”之类的解决方案。

回答:

那么这个的解决方案。

由于printf是一个纯C函数,它不会识别Objective-C对象。 (NSLog的格式化程序与printf的不同。)因此,在格式化之前必须将其转换为C字符串。

顺便说一句,您可以使用[str UTF8String]而不是[str cStringUsingEncoding:NSUTF8StringEncoding]

回答:

您应该使用自定义文件处理程序或自己编写宏。

提示:当NSLog输出一个对象时,它使用对象的debugDescription方法。您可以为您的自定义NSObject子类重写此方法以将自定义debugInfo打印到标准输出。

回答:

由于几乎所有的项目都是图形用户界面,因此在Cocoa中实现一个非常罕见的事情是在stdout中喷发东西。相对较少的项目是作为命令行工具构建的,否则需要处理stdout

但是,基金会确实提供了写入标准输出的方法。具体来说,NSFileHandlefileHandleWithStandardOutput它给你一个文件句柄,可以写入stdout

从那里,它是将NSString转换为NSData并写入它的问题。

不少措施,但容易包裹在一个可重复使用的功能:

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];

}

回答:

我想你会发现,这些足以满足您的需求:

// print to stdout 

static void NSPrint(NSString *format, ...) {

va_list args;

va_start(args, format);

NSString *string = [[NSString alloc] initWithFormat:format arguments:args];

va_end(args);

fprintf(stdout, "%s\n", [string UTF8String]);

#if !__has_feature(objc_arc)

[string release];

#endif

}

// print to stderr

static void NSPrintErr(NSString *format, ...) {

va_list args;

va_start(args, format);

NSString *string = [[NSString alloc] initWithFormat:format arguments:args];

va_end(args);

fprintf(stderr, "%s\n", [string UTF8String]);

#if !__has_feature(objc_arc)

[string release];

#endif

}

回答:

C字符串(UTF8字符串)是一个指向字符串对象内部结构的指针。

NSString *str = @"Hello, World."; 

printf("%s\n", [str UTF8String]);

回答:

我只是做:

define NSPrintf(...) printf("%s", [[NSString stringWithFormat: __VA_ARGS__] UTF8String]) 

然后我就可以使用它作为:

NSPrintf(@"Sorry %@, I can't do that\n", name); 

以上是 打印NSString 的全部内容, 来源链接: utcz.com/qa/258220.html

回到顶部