Разница между NSLog и выводом Printf для ObjectiveC
Я хочу знать о различии между оператором NSLog
и Printf
в Objective-C (для целей приложения...!)
Почему все разработчики используют NSLog
вместо Printf
?
Оба выглядят похожими, но в чем разница во внутренней работе?
В какой момент они могут быть дифференцированы?
Ответы
Ответ 1
-
printf()
является стандартной библиотечной функцией C, принимающей строчную константу C (const char *
) в качестве аргумента формата. printf()
записывает в stdout.
-
NSLog()
- это функция Foundation, принимающая постоянный формат NSString в качестве формата и имеющий спецификатор расширенного формата (например, printf()
не печатает объекты, указанные %@
, NSLog()
делает).
NSLog()
также печатает имя процесса и дату до того, как он печатает фактический формат и записывает в sdterr.
В принципе, мы можем сказать, что NSLog()
является расширенным printf()
Функция стиля для Objective-C (точнее, Cocoa и Cocoa Touch) и конкретные цели.
Ответ 2
NSLog похож на printf, но он немного больше:
- Временная метка добавляется к выходу.
- Выход отправляется в консоль Xcode или любой из stderr определяется как.
- Он принимает все спецификаторы printf, но также принимает оператор
@
для объектов, который отображает строку, предоставленную методом объекта description
. (description
является частью NSObject, поэтому все объекты могут переопределить его, чтобы вернуть строку, описывающую объект).
- Вывод также отправляется в системный журнал Apple (ASL), который является версией syslogd для Apple. Эти данные могут быть прочитаны другими приложениями с использованием API C или пользователя OS X с помощью приложения "Консоль".
Ответ 3
С точки зрения разработчика большая разница заключается в том, что NSLog поддерживает типы объектов Objective-C через формат% @. NSLog также записывает в stderr, а printf записывает в stdout.
Ответ 4
Я вижу два основных различия между NSLog
и printf
:
-
NSLog
поддерживает NSString
объекты через расширение %@
;
-
Кроме того, NSLog
автоматически добавляет данные времени и процесса (например, 2012-01-25 17: 52: 10.479 процесс [906: 707])