Как уже отмечалось, это больше не нужно объявлять резервное переменную экземпляра для синтезированного свойства в заголовке.
Чтобы сделать это немного яснее: Что вы видите, это не два объявления одной и той же переменной, это одно объявление переменной и одно объявление свойства .
Свойство - это в основном набор методов (в данном случае selectedIndex
и setSelectedIndex:
), которые обычно используются для доступа к переменным экземпляра. Существует различие между свойством и переменной экземпляра. Установщик/получатель свойств мог бы сделать больше, чем просто установить переменную, в вашем примере она также может быть, например, обновить пользовательский интерфейс, чтобы отразить изменение выбранного индекса, или геттер мог бы вывести индекс из какой-либо другой переменной (в этом случае может быть указательный путь выбора) и т. д.
Синтезируя свойство просто освобождает вас от реализации эти методы сами и предоставляют вам реализации по умолчанию, которые просто устанавливают переменную, но вы также можете реализовать selectedIndex
и setSelectedIndex:
сами, как и любой другой метод, и в этом случае вам может понадобиться сама переменная экземпляра или вообще опустить ее (в случае вывода имущество).
Пожалуйста, добавьте тег языка к вашему вопросу – Shahbaz
В текущей версии Xcode вам даже не нужен @synthesize. Просто определите свое свойство, а компилятор сделает все остальное. – physics90
Возможный дубликат: http://stackoverflow.com/questions/11033775/objective-c-multiple-declarations-of-instance-variables-properties – viral