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

Синтезированное свойство и переменная с префиксом подчеркивания: что это значит?

Возможный дубликат:
Подчеркнуть префикс имени свойства?

Что это значит? @synthesize window=_window; Я знаю, что в целом это означает, что "некоторый класс" имеет окно, но зачем использовать _window вместо просто window? Является ли это пространством имен?

4b9b3361

Ответ 1

Я расскажу об этом соглашении по программированию на основном английском языке.

Это очень распространенное соглашение на других языках, чтобы назвать переменные-члены с предшествующими m, m_ или _, чтобы отличить их от локально объявленных переменных и означать, что они должны иметь письменные записи, если необходимо (нет classInstance.m_Variable = 5).

Если программист Objective-C объявляет ivars после этого соглашения (и они должны) и использует базовый синтаксис @synthesize _window;, то использование для свойства становится несколько уродливым: classInstance._window = myWindow или [classInstance set_window:myWindow]. Использование синтаксиса @synthesize window=_window; позволяет программисту Obj-C использовать популярный стандарт программирования (предшествующие ivars с _), одновременно имея атрибуты свойств, которые используют стандарт Apple classInstance.window = myWindow и [classInstance setWindow:myWindow].

Ответ 2

Это очень распространенная вещь, которую нужно сделать в программировании iOS/ objective-C, это связано с иварами. Для получения дополнительной информации вы можете прочитать здесь:

Почему переименовать синтезированные свойства в iOS с лидирующими символами подчеркивания?

Как подчеркивается символ подчеркивания перед переменной в классе cocoa objective-c?

Основываясь на моем опыте использования этой привычки в моем коде, он помогает мне случайно писать окно, когда вы имеете в виду self.window и наоборот (не обязательно должно быть окно, но любые другие переменные)

Ответ 3

короткий ответ: подчеркивание - это просто соглашение, полезно подчеркнуть тот факт, что переменные класса "private" для класса, и вы должны получить к ним доступ через свои свойства.

вы можете объявить свою переменную window без предварительного подчеркивания; в этом случае оператор @synthetize будет просто: @synthetize window, и он будет практически таким же.

для длинного ответа, ссылки, размещенные aherlambang, действительно интересны для чтения...