打印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
。
但是,基金会确实提供了写入标准输出的方法。具体来说,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];
}
回答:
我想你会发现,这些足以满足您的需求:
// 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