Подтвердить что ты не робот

Просмотр значения синтезируемого свойства в отладчике Xcode, когда нет переменной поддержки

Недавно я начал использовать синтезированные переменные экземпляра в моих проектах iPhone. Проблема в том, что я не вижу синтезированных иваров в отладчике. Есть ли способ просмотреть свойства объекта в отладчике, если он не использует явно объявленные переменные экземпляра?


Мне нужно уточнить второй вопрос. Я не спрашиваю о том, как получить доступ к свойствам или что они делают; Я знаю все это. У меня создалось впечатление, что вы не можете получить доступ к переменным экземпляра непосредственно при использовании синтезированных ivars на основе этого сообщения. Я, очевидно, был в состоянии сделать то, что, как я думал раньше, было невозможно. Мне интересно, что происходит.

Я использую Xcode 3.2.4/iPhone Simulator/LLVM Compiler 1.5.

4b9b3361

Ответ 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 будет отображаться"