Возможно ли NSLog () без маркировки времени и даты и автоматической новой строки?

Имеет ли NSLog () варианты, которые печатаются без маркировки времени и даты, и автоматической новой строки?

Благодарю. Теперь со следующим кодом я могу напечатать NSString, cString или объекты:

#import  #import  int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *s = @"Hello, World!"; NSDate *today = [NSDate date]; NSLog(@"%@", s); printf("%s at %s", [s UTF8String], [[today description] UTF8String]); [pool drain]; return 0; } 

Используйте printf() вместо NSLog()

Меня это тоже беспокоило, поэтому я написал функцию для замены NSLog() и printf() :

 void IFPrint (NSString *format, ...) { va_list args; va_start(args, format); fputs([[[[NSString alloc] initWithFormat:format arguments:args] autorelease] UTF8String], stdout); va_end(args); } 

Затем вы можете просто использовать его вместо NSLog() (например, IFPrint(@"Current date: %@", [NSDate date]) ), но он не распечатает никаких временных меток или новой строки, и вы не придется возиться с C-строками и массивами, и еще много чего. Я бы сказал, это очень удобно.

Если вы хотите, проверьте мой полный код (здесь я также написал замену fprintf, scanf и fscanf).
(Здесь также есть тема SO).

Этот код будет работать

 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #else #define NSLog(...) {} #endif 

Мне нравится решение Итай. Я просто изменил код, чтобы использовать CFShow в среде ARC.

 void CFLog(NSString *format, ...) { va_list args; va_start(args, format); CFShow((__bridge CFStringRef)[[NSString alloc] initWithFormat:format arguments:args]); va_end(args); } 

Определение макроса

 #if __has_feature(objc_arc) #define DLog(format, ...) CFShow((__bridge CFStringRef)[NSString stringWithFormat:format, ## __VA_ARGS__]); #else #define DLog(format, ...) CFShow([NSString stringWithFormat:format, ## __VA_ARGS__]); #endif 

И используйте этот макрос в вашем коде, как

 NSLog(@"Content with time stamp"); DLog(@"Content without time stamp"); 

Вот вывод консоли

NSLog-> 2014-01-28 10:43:17.873 TestApp[452:60b] Content with time stamp
DLog -> Content without time stamp отметки Content without time stamp


PS

Если кому-то нужны пользовательские журналы, которые дают вам больше информации, например, имя метода / номер строки и т. Д., Можно загрузить с открытым исходным кодом MLog.h on GitHub .

ПЕРВАЯ вещь, которую я делаю в ЛЮБОМ проекте, – это падение моей (моей сокращенной версии) этого classа …, которая избавляется от ВСЕХ НЕСАНДОВ в NSLog … Поместите это вверху файла .m и ваш консольный вывод будет PERFECT ,

 #import  #import  #define MLogString(s,...) \ [MLog logFile:__FILE__ lineNumber:__LINE__ \ format:(s),##__VA_ARGS__] @interface MLog : NSObject { } + (void) logFile: (char*) sourceFile lineNumber: (int) lineNumber format: (NSString*) format, ...; + (void) setLogOn: (BOOL) logOn; @end #ifndef NDEBUG extern void _NSSetLogCStringFunction(void (*)(const char *string, unsigned length, BOOL withSyslogBanner)); static void PrintNSLogMessage(const char *string, unsigned length, BOOL withSyslogBanner){ puts(string); } static void HackNSLog(void) __attribute__((constructor)); static void HackNSLog(void){ _NSSetLogCStringFunction(PrintNSLogMessage); } #endif static BOOL __MLogOn = NO; @implementation MLog + (void) initialize { char * env = getenv("MLogOn"); if (strcmp(env == NULL ? "" : env, "NO") != 0) __MLogOn = YES; } + (void) logFile: (char *) sourceFile lineNumber: (int) lineNumber format: (NSString *) format, ...; { va_list ap; NSString *print, *file; if (__MLogOn == NO) return; va_start(ap, format); file = [[NSString alloc] initWithBytes: sourceFile length:strlen(sourceFile) encoding: NSUTF8StringEncoding]; print = [[NSString alloc] initWithFormat:format arguments: ap]; va_end(ap); // NSLog handles synchronization issues NSLog(@"%s: %d %@", [[file lastPathComponent] UTF8String], lineNumber, print); return; } + (void) setLogOn: (BOOL) logOn { __MLogOn = logOn; } @end 
  • В чем разница между '->' (оператор стрелки) и '.' (оператор точки) в Objective-C?
  • Защищенные методы в Objective-C
  • Объявление декларации свойства
  • Динамические свойства Objective-C во время выполнения?
  • Разница между категорией и расширением classа?
  • Как я могу создать базовый UIButton программно?
  • Что означает символ @ в объективе-c?
  • Регулярные выражения в приложении Cocoa Objective-C
  • Как я могу вызвать метод в Objective-C?
  • Как проверить, какой class является объектом Objective-C?
  • Самый эффективный способ перебора всех символов в NSString
  • Interesting Posts

    Оставьте обработку ACL для Windows с помощью Cygwin rsync

    «Распаковка» кортежа для вызова соответствующего указателя функции

    Как получить доступ к первому свойству объекта в Javascript?

    Понимание стека кадров вызова функции в C / C ++?

    Выполнение команды терминала из приложения Cocoa

    Windows 7 – Как запустить скрипт при выключении, но не при выходе из системы

    Проблемы с использованием Maven и SSL за прокси-сервером

    Как отправить модель в jQuery $ .ajax () отправить запрос на метод MVC-controllerа

    Используйте два внешних жестких диска как один

    Могу ли я отключить ручку Adobe Reader при масштабировании и прокрутке с указателем стрелки вниз?

    Java: как масштабировать streamи в соответствии с ядрами процессора?

    Привести другие процессы Окно на передний план, если у него есть ShowInTaskbar = false

    Как передать аргументы командной строки псевдониму оболочки?

    CS0234: Mvc не существует в пространстве имен System.Web

    Как получить данные из другого файла excel и отсортировать его под именем?

    Давайте будем гением компьютера.