在Objective-C中打印NSString的正确方法是什么?很多例子都使用NSLog(),但根据文档:
NSLog是一个FoundationKit函数,用于将调试语句打印到控制台.... NSLog的工作原理基本上如下:fprintf(stderr,format_string,args ...);
对我来说有点像Win32/C++中的_TRACE宏.我不想打印到stderr,我想打印到stdout.有人建议使用printf()如下:
printf("%s", [str cStringUsingEncoding:NSUTF8StringEncoding]);
Run Code Online (Sandbox Code Playgroud)
但这似乎是间接的一个额外的水平,以打印NSString,它并没有"感觉"像解决方案.
bbu*_*bum 29
喷涌的东西stdout其实是一个相当罕见的事情在可可的事情,因为几乎所有的项目都在大自然GUI.作为命令行工具或需要处理的项目相对较少stdout.
但是,基金会确实提供了写入stdout的方法.具体来说,NSFileHandle有fileHandleWithStandardOutput哪些让你可以写入文件句柄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];
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 25
那么这就是解决方案.
由于printf是纯C函数,因此无法识别Objective-C对象.(NSLog的格式化程序与printf的格式化程序不同.)因此,您必须在格式化之前将其转换为C字符串.
BTW你可以用[str UTF8String]而不是[str cStringUsingEncoding:NSUTF8StringEncoding].
小智 6
C 字符串(UTF8String)是指向字符串对象内部结构的指针。
NSString *str = @"Hello, World.";
printf("%s\n", [str UTF8String]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29452 次 |
| 最近记录: |