Разница между утверждениями NSLog и Printf для ObjectiveC - PullRequest
21 голосов
/ 25 января 2012

Я хочу знать о разнице между оператором NSLog и Printf в Objective-C (для целей приложения ...!)

Почему все разработчики используют NSLog вместо Printf?

Оба выглядят одинаково, но в чем разница во внутренней работе?

На каком этапе их можно дифференцировать?

Ответы [ 4 ]

31 голосов
/ 25 января 2012
  • printf() - это стандартная библиотечная функция C, принимающая строковую константу C (const char *) в качестве аргумента формата.printf() пишет в стандартный вывод.

  • NSLog() - это базовая функция, принимающая константу NSString в качестве формата и имеющая расширенный спецификатор формата (например, printf() делает 't печатает объекты, указанные %@, NSLog() делает).NSLog() также печатает имя и дату процесса, прежде чем он напечатает фактический формат и запишет в sdterr.

По сути, мы можем сказать, что NSLog() является расширенной printf() функцией стилядля Objective-C (точнее, Cocoa и Cocoa Touch) и конкретных целей.

26 голосов
/ 25 января 2012

NSLog похож на printf, но делает немного больше:

  • К выходу добавляется временная метка.
  • Выходные данные отправляются на консоль Xcode или как указано в stderr.
  • Он принимает все спецификаторы printf, но также принимает оператор @ для объектов, который отображает строку, предоставленную методом description объекта. (description является частью NSObject, поэтому все объекты могут переопределить его для возврата строки, описывающей объект).
  • Вывод также отправляется в системный журнал Apple (ASL), который является версией Apple syslogd. Эти данные могут быть прочитаны другими приложениями, использующими API C, или пользователем OS X, использующим приложение «Консоль».
9 голосов
/ 25 января 2012

С точки зрения разработчика, самое большое отличие состоит в том, что NSLog поддерживает типы объектов Objective-C через формат% @.NSLog также пишет в stderr, а printf пишет в stdout.

3 голосов
/ 25 января 2012

Я вижу два основных различия между NSLog и printf:

  1. NSLog поддерживает NSString объекты через расширение %@;

  2. кроме того, NSLog автоматически добавляет время и данные процесса (например, 2012-01-25 17: 52: 10.479 процесс [906: 707])

...