#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 требуется балансирующий релиз для любого явного сохранения.