TODO ==== - remove dependency on FoundationExt on GNUstep Base and Cocoa - added source of FileObjectHolder, NSRunLoop+FileObjects NSString+Encoding.m: - encoding support for MacOSX and other non-iconv platforms - add a "charset" encoding registry - improve error handling - improve buffer size handling NGLogger: - fix format bugs - fix performance - running two format parsers and varargs processors is unnecessary and far too expensive - running seven methods calls just in logWithFormat:arguments: is expensive - analysis: (for a simple logWithFormat:) - NSObject logWithFormat:arguments: - one format parser - one varargs run - 7 method calls - NSObject logger - caches in static variable, no method call after warm up - NGLogger isLogInfoEnabled - simple comparison (use macro or access public ivars?) - NSObject loggingPrefix - one autorelease string - one format parser - 2 method calls - NGLogger logWithFormat:arguments: - since we already know that logging is enabled, we do not need to check again => forceLogWithPrefix:string: or -logLevel:message: - one format parser - one varargs run - 4 method calls - NGLogger logLevel:message: - creates/releases a log event object - calls appender - 4 method calls - NGLogConsoleAppender - (incorrectly) calls NSLog => one varargs parser - 1 method call - NGLogAppender formattedEvent: - 8 method calls - creates an autorelease string - NGLogAppender localizedNameOfLogLevel: - simple switch - summary: limit NGLogger to the few applications which require it - having -logWithFormat:arguments: on NSObject seems unnecessary, there is no reason to override this method