Performance Problems of NSLog

Good analysis:


http://klazuka.wordpress.com/2010/06/03/nslog-performance/

The sample code he gave to improve the performance of NSLog is as follows:

static NSDateFormatter *gFormatter;
void KLog(NSString *format, ...)
{
	va_list ap;
	va_start(ap, format);

	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
	NSDate *now = [[NSDate alloc] init];
	OSSpinLockLock(&gFormatterLock);
	NSString *timestamp = [gFormatter stringFromDate:now];
	OSSpinLockUnlock(&gFormatterLock);
	NSString *content = [[NSString alloc] initWithFormat:format arguments:ap];
	const char *cc = [content cStringUsingEncoding:NSUTF8StringEncoding];
	const char *fmt = [content characterAtIndex:[content length]-1] == '\n' ? "%s %s" : "%s %s\n";
	fprintf(stderr, fmt, [timestamp cStringUsingEncoding:NSUTF8StringEncoding], cc);
	[now release];
	[content release];

	[pool release];
	va_end(ap);
}

Leave a comment