Описание NSObject и debugDescription
Я видел упоминание описания и debugDescription для целей отладки, но до сих пор не видел точных объяснений, когда использовать, какие и при каких условиях они могут давать разные результаты.
Документация NSObject также не имеет ничего о debugDescription. Вопрос: Когда использовать, какие и при каких условиях должен/должен отличаться их вывод?
Ответы
Ответ 1
Техническая нота TN2124
Примечание. print-object фактически вызывает метод debugDescription для указанного объекта. NSObject реализует этот метод, перейдя к методу описания. Таким образом, по умолчанию описание отладки объекта такое же, как и его описание. Однако вы можете переопределить debugDescription, если вы хотите отделить их; многие объекты Cocoa делают это.
Если у вас реализовано debugDescription
, печать объекта в GDB отобразит его результат. Зная, что description
используется в пользовательском интерфейсе (я знаю, что привязки делают это), вы можете использовать его для печати некоторой дополнительной информации, которую пользователь не должен видеть.
Ответ 2
Одно дополнение к тому, что уже было сказано.
Если вы хотите улучшить вывод при работе с po
в lldb, вы можете переопределить метод debugDescription
. Просто имейте в виду, что само печать (сам объект) вызовет метод описания. Если по какой-либо причине <ClassName: objectAddress>
не подходит для вас, также переопределите этот метод.
Итак, я хотел бы подчеркнуть, что само печать будет вызывать метод description
, тогда как po
вызывает debugDescription
, который по умолчанию вызывает описание. Предоставляя это, вы можете отличать результаты этих вызовов.