Почему автоматически сгенерированный базовый проект данных содержит синтез для управляемогоObjectContext? - PullRequest
3 голосов
/ 16 мая 2011

Когда мы автоматически создаем основной объект данных, я вижу строку

@synthesize managedObjectContext=__managedObjectContext;

Однако я не думаю, что нам когда-нибудь понадобится эта строка, потому что код также генерирует функцию

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil)
    {
        return __managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil)
    {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return __managedObjectContext;
}

Так чего мне здесь не хватает?

Зачем синтезировать код, который мы действительно пишем?

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Директива @synthesize

... сообщает [s] компилятору, что он должен синтезировать методы setter и / или getter для свойства , если вы не предоставите их в@implementation блок .

Вам все еще разрешено создавать свои собственные реализации.

Так зачем использовать @synthesize?Чтобы связать переменную (хранилище) с именем __managedObjectContext со свойством (общедоступная точка доступа) с именем managedObjectContext.

Почему это нужно?Как отметил Хенрик, вы можете выполнить ленивую настройку хранилища.

1 голос
/ 02 октября 2014

из большого ряда основных данных по tuts плюс: «Поскольку свойства в интерфейсе класса TSPAppDelegate объявлены как доступные только для чтения, методы установки не создаются. Первая директива @synthesize указывает компилятору связать переменную экземпляра _managedObjectContext с свойство managedObjectContext, которое мы объявили в интерфейсе класса. Это обычный шаблон для ленивой загрузки объектов. "

http://code.tutsplus.com/tutorials/core-data-from-scratch-core-data-stack--cms-20926

1 голос
/ 16 мая 2011

Поскольку @synthesize managedObjectContext=__managedObjectContext; создает методы получения и установки для вашего свойства (переменная экземпляра), которое является допустимым в области объекта. Вы получаете доступ к этому свойству, пока вы (ленивый) настраиваете его по методу, который вы упомянули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...