Просмотр значения синтезируемого свойства в отладчике Xcode, когда нет переменной поддержки
Недавно я начал использовать синтезированные переменные экземпляра в моих проектах iPhone. Проблема в том, что я не вижу синтезированных иваров в отладчике. Есть ли способ просмотреть свойства объекта в отладчике, если он не использует явно объявленные переменные экземпляра?
Мне нужно уточнить второй вопрос. Я не спрашиваю о том, как получить доступ к свойствам или что они делают; Я знаю все это. У меня создалось впечатление, что вы не можете получить доступ к переменным экземпляра непосредственно при использовании синтезированных ivars на основе этого сообщения. Я, очевидно, был в состоянии сделать то, что, как я думал раньше, было невозможно. Мне интересно, что происходит.
Я использую Xcode 3.2.4/iPhone Simulator/LLVM Compiler 1.5.
Ответы
Ответ 1
Отредактировано для добавления ответа на вторую часть:
Это работает на Xcode 3.1, поэтому я не понимаю, почему он не будет работать в более поздних версиях
Что вы можете сделать, это отправлять сообщения непосредственно на объект с консоли при отладке.
Предположительно, вы остановились на точке останова, и вы смотрите на переменные в представлении отладки. для объектов, они показывают вам указатели. Вы можете не видеть iVar, но у вас есть указатель на объект, и вы можете отправлять его сообщениям. например:
- Вы остановились на некоторой точке останова внутри объекта
- В представлении переменной показан адрес указателя
self
, который должен быть (скажем) 0x1031380
.
- В консоли типа
po [0x1031380 title]
(обратите внимание, что точки с запятой нет) и введите
- Вы должны увидеть, что хотите в консоли.
Когда вы объявляете свойство с помощью (retain)
и впоследствии синтезируете свойство, вы создаете сеттеры, которые сохраняют переданный им объект/значение. поэтому в вашем случае выше вы должны переписать метод следующим образом:
- (void)viewDidLoad {
self.title = @"woah";
}
И строка будет сохранена как часть setter. Кроме того, я предпочитаю использовать (copy)
для кластеров классов, которые имеют изменяемые/неизменяемые пары (NSString
, NSSet
, NSArray
и т.д.). Таким образом, свойство не может быть изменено извне.
Ответ 2
Вам не нужно использовать указатель/адрес переменной. Вместо этого вы можете использовать имя переменной следующим образом:
po [myVar title]
xcode поможет вам ввести имя переменной (myVar выше), если переменная находится в области.
Ответ 3
Если вы не хотите вручную вводить po [blahblah]
, вы можете сделать то, что xnav предложило здесь, где вы либо явно объявите переменные экземпляра в заголовке, либо "в области переменных отладки щелкните правой кнопкой мыши на" self "и выберите" Добавить выражение ", затем введите, например, _wordLength 'и ivar будет отображаться"