2017-02-13 11 views
0

У меня есть атрибут Core Data, который является типом Binary Data. Мы используем NSArchiver для архивации NSArray пользовательских объектов, а затем сохраним их в Core Data.Основные данные Двоичные данные Тип загрузки не освобождает память

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

Проблема с этим связана с большой памятью, и я почему-то не могу ее вернуть. После разборки данных, проверки некоторых объектов, а затем установки NSArray или NSData объекта на ноль, эта память никогда не восстанавливается. Выполнение этого же действия для многих объектов Core Data приводит к огромному использованию памяти, которое никогда не возвращается.

Есть ли причина, по которой это произойдет, или способ, которым я могу освободить эту память, которую я явно не использую?

Edit:

Я делал следующий без успеха:

[managedObjectContext refreshObject:myObject mergeChanges:NO]; 
+0

Просто добавьте другую информацию. Вместо архивации NSArray в данные используются данные TRANSFORMABLE, доступные в coredata. Для примера http://stackoverflow.com/questions/8682324/insert-nsdictionary-into-coredata/25891673#25891673 –

+0

Вы пытались выполнить эту задачу внутри блока '@ autoreleasepool'? – KrishnaCA

+0

@ KrishnaCA Да, но это, похоже, не помогло. –

ответ

0

У меня такая же проблема. Он генерирует много временной памяти, когда я использую NSUnarchiver для разблокирования данных, а временная память не будет выпущена. Я решил это, добавив @ autoreleasepool, как сказал @ KrishnaCA. Разве это не подходит для кода, который вы добавили? Если вы покажете свой простой код, это поможет решить проблему.

+0

Где вы добавляете его? Вокруг кода, где вы используете «NSUnarchiver»? –

+0

С самого начала использования NSUnarchiver, для окончательного использования данных, полученных NSUnarchiver. –