NSLog предназначен для общего назначения? - PullRequest
1 голос
/ 28 июля 2011

В target-c при создании нового проекта я получаю следующее:

NSLog(@"Hello, World!");

Я не могу найти другие простые методы написания в библиотеке Foundation.
Является ли NSLog printf объектива-c? рекомендуется ли использовать его в производстве для печати на экране (из инструментов командной строки)?
Если нет, то как я могу печатать на экране с помощью библиотеки Foundation?

Edit:
Похоже, что NSLog также добавляет метку времени и прочее, я думал, что это только консоль Xcode. Как я могу напечатать объективные объекты c, используя формат как NSLog без отметок времени?

Ответы [ 4 ]

3 голосов
/ 28 июля 2011

Objective C - это расширенный набор C, поэтому вы все равно можете использовать printf, scanf и т. Д. NSLog печатает метку времени и некоторую информацию о процессе и отображается в системной консоли. NSLog также знает, как печатать объекты Obj-C (используйте спецификатор формата %@).

2 голосов
/ 28 июля 2011

Если хотите, вы можете делать то, что я обычно делаю: определить свою собственную функцию печати, которая работает так же хорошо, минус отметка времени:

void IFPrint (NSString *format, ...) {
    if (!format) return;
    va_list arguments;
    va_start(arguments, format);
    fputs([[[[NSString alloc] initWithFormat:format arguments:arguments] autorelease] UTF8String], stdout); // Omit autorelease call if using ARC.
    va_end(arguments);
}

Способ, которым это работает, заключается в том, что он использует синтаксический анализ текста NSString (точно так же, как вы используете %@ для печати объектов через NSLog), и выводит его очень просто на экран. Это быстрее, чем NSLog, и не проходит через службу системного журнала.

0 голосов
/ 28 июля 2011

NSLog предназначен для записи отладочной трассировки на консоль.Objective-c на самом деле не ориентирован на разработку консольного приложения, поэтому если бы это было именно тем, что вы намеревались, я бы либо посмотрел на базовые библиотеки C и использовал printf и scanf, либо на фреймворк, подобный этому:

Структура командной строки Objective-C

С точки зрения того, как вы можете распечатать описание объекта без информации о временной метке NSLog, я бы использовал printf для вывода вывода [[myObject description] UTF8String], как я полагаю, это то, что NSLog использует, когда вы распечатываете объект, используя спецификатор формата% @.

0 голосов
/ 28 июля 2011

Вы можете использовать printf.NSLog удобно, если вы печатаете NSStrings и другие объекты Objective-C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...