В синтаксисе @synthesize
левая сторона =
(это просто символ, который синтез использует для этого синтаксиса, а не оператор присваивания) - это имя свойства (и связанные методы) , а правая часть =
- это переменная экземпляра, используемая для именованного свойства.
В приведенном выше примере @synthesize fetchedResultsController=fetchedResultsController_
создает fetchedResultsController метод получения и setFetchedResultsController: метод установки, оба используют переменную экземпляра fetchedResultsController_ для хранения.
Аналогично, @synthesize managedObjectContext=managedObjectContext_
создает managedObjectContext и setManagedObjectContext: методы доступа, оба поддерживаемые managedObjectContext_ переменной экземпляра.
Если бы «правые стороны» не были явно указаны (если объявление читается как @synthesize fetchedResultsController, managedObjectContext;
) , синтезировать принял бы то же имя для переменной экземпляра, что и свойство.Некоторым программистам на Objective-C не нравится оставлять это при этом поведении по умолчанию, потому что можно легко совершить ошибку, намереваясь установить локальную переменную области действия и вместо этого установить переменную экземпляра.Использование подчеркивания для всех переменных экземпляра делает их намерение более понятным.
Для ясности, несколько @synthesize
свойств могут быть объединены в одно путем разделения через запятую;каждый по-прежнему является собственным объявлением, так что вышеприведенное полностью эквивалентно:
@synthesize fetchedResultsController=fetchedResultsController_;
@synthesize managedObjectContext=managedObjectContext_;
Также ничего не стоит, в более новых версиях Xcode / iOS переменные экземпляра будут создаваться автоматически, если они не определены явно, а объявления @synthesizeтакже предполагается, если не указано иное.Эти различия объяснены в кратком справочнике Apple Objective-C о доступности функций .