我如何刷新NSLog的缓冲区?

我有这样的error handling代码:

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

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

尝试以下操作:

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

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

切勿以编程方式退出iOS应用程序,因为人们倾向于将其解释为崩溃。 但是,如果外部环境阻止您的应用程序按预期运行,则需要告诉用户有关情况并解释他们可以做些什么。 根据应用程序故障的严重程度,您有两种select。

考虑一下:

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