Код: (Цель-C) @synthesize window = _window;
Он говорит, что синтезирует геттеры и сеттеры для свойства с именем window и связывает это свойство с переменной экземпляра, называемой _window (которая не должна быть отдельно объявлена в другом месте). Apple хочет, чтобы вы установили и извлекли значение переменной экземпляра через синтезированные сеттеры и геттеры. То есть, написав что-то вроде этого:
Код: (Objective-C) [window makeKeyAndVisible];
не будет работать, так как нет имени переменной с именем. Вместо этого вы должны либо называть переменную экземпляра непосредственно своим именем; то есть
Код: (Цель-C) [_window makeKeyAndVisible];
или использовать метод доступа:
код: (Objective-C) [self.window makeKeyAndVisible];
Переменные экземпляра теперь обычно являются частными, то есть они недоступны подклассам непосредственно по имени. Таким образом, подклассы не имеют другого выбора, кроме как использовать унаследованные методы доступа, чтобы получить доступ к их значениям. Помните, что синтезированные методы могут выполнять дополнительную работу на основе их атрибутов (например, сохранить, копировать, неатомически), которые не будут выполняться при назначении или извлечении значений непосредственно в/из переменной экземпляра. Таким образом, существует дополнительный уровень абстракции между свойством и переменной экземпляра.
здесь self.window, окно действовать как способ ya экземпляр переменной .. ??? –
@synthesize window = _window –
Почему кто-то все еще использует @synthesis, если это делается автоматически в современном clang? – Andy