удаление NSManagedObject, который не был сохранен

#objective-c

#objective-c

Вопрос:

Я создал (переопределяющий) экземпляр NSManagedObject , используя insertNewObjectForEntityForName: .

Если я никогда не сохранял контекст (и не увеличивал его количество сохранений), нужно ли мне все еще удалять его с помощью obj.managedObjectContext deleteObject:obj ?

Если да, и предполагается, что он сохранен, должен ли я сначала удалить его, а затем освободить?

Ответ №1:

После использования insertNewObjectForEntityForName: объект будет находиться в вашем NSManagedObjectContext независимо от того, сохраняете ли вы продукт NSManagedObject вызова insert. К этому вопросу не имеет отношения, сохранили ли вы контекст.

Вы всегда можете получить экземпляр этой записи, запросив контекст соответствующим образом. Это может быть исходный экземпляр NSManagedObject, который вам предоставил insert, а может и нет. Зависит от работы вашего приложения.

Если вы хотите, чтобы этот объект снова был удален оттуда, вам нужно удалить его из контекста или каким-либо образом вернуться к самому последнему сохраненному состоянию.

Комментарии:

1. Просто чтобы убедиться, что я правильно понимаю: независимо от приведенного выше объяснения, мне все еще нужно управлять количеством сохранений этого объекта, как и любого другого обычного объекта, чтобы избежать утечки памяти. Правильно?

2. Будучи методом класса, insertNewObjectForEntityForName: возвращает автоматически выпущенный объект. Если вы хотите сохранить контроль над этим объектом, вам нужно сохранить либо путем помещения в контейнер, либо явно сохраняя. Но объект — это просто представление записи в базе данных, поэтому, как только вы вставите его туда, пока не удалите или не сохраните.

3. Да, я понимаю, что объект возвращается автоматически. Мне просто интересно узнать об аспекте управления памятью NSManagedObject в целом. Я предполагаю, что как только у меня будет объект (либо через inserNewObject, либо через выборку), когда мне больше не нужен фактический объект в памяти, независимо от того, нужно ли мне его хранить в БД, его нужно освободить просто как обычный объект. Снова исправить?

4. Для освобождения любого подкласса NSObject требуется балансирующий релиз для любого явного сохранения.