如何刷新NSLog的缓冲区?

时间:2012-03-03 14:10:54

标签: objective-c ios

我有这样的错误处理代码:

if (ERROR) {
   NSLog(@"<some message>");
   exit(-1);
}

使用NSLog记录的消息并不总是出现在控制台中,可能是因为exit()终止了进程而没有刷新NSLog的缓冲区。我怎样才能自己刷新NSLog的缓冲区?

2 个答案:

答案 0 :(得分:4)

尝试以下方法:

if (ERROR) {
   NSLog(@"<some message>");
   fflush(stderr);
   exit(-1);
}

但您不应在生产代码中使用exit,因为Apple Human Interface Guidelines清楚地说明了这一点:

  

从不以编程方式退出iOS应用程序,因为人们倾向于将此解释为崩溃。但是,如果外部环境阻止您的应用程序按预期运行,您需要告知用户有关情况并解释他们可以采取的措施。根据应用程序故障的严重程度,您有两种选择。

答案 1 :(得分:1)

考虑一下:

[someMessage writeToFile:@"/dev/stderr" atomically:NO 
      encoding:NSASCIIStringEncoding error:nil];