Вызваны ли сбои из памяти, если текущий пул автоматического выпуска очищен? - PullRequest
2 голосов
/ 14 февраля 2012

Я выполняю на стороне iOS подпрограмму синхронизации и пытаюсь сохранить низкий профиль памяти.

У мамы есть эти 2 сущности:

  • NSManagedObjectБар
    • отношение ко многим с NSManagedObject Foo (“fooMembers”)
  • NSManagedObject Foo
    • отношение один к одному с NSManagedObject Bar
    • Атрибут NSString «masterObjectID»
    • множество других связей и атрибутов

Мне нужно собрать коллекцию всех строк masterObjectID, которые хранятся у всех членов fooMembers некоторыхбары, которые были полученыДля этого я перебираю fooMembers баров, которые, как я полагаю, запускает ошибки всех foos, и извлекаю masterObjectID, добавляя их в мою коллекцию.

Строки masterObjectID не занимаютслишком много памяти, но foos делают.

Так что мое решение состоит в том, чтобы окружить итерацию запуска foo-fault с помощью пула автоматического выпуска, сохраняя строки masterObjectID, но надеясь, что foos будет освобожден из памятикогда я истощаю этот пул:

    NSMutableSet *smsetExistingMemberIDs = [NSMutableSet setWithCapacity:[bar.fooMembers count]];

    NSAutoreleasePool *subpool = [[NSAutoreleasePool alloc] init]; // POOL

    for (Foo *foo in bar.fooMembers) 
        [smsetExistingMemberIDs addObject:[foo.masterObjectID retain]]; // retain the string so that it will survive the drain

    [subpool drain]; // DRAIN

    // work with smsetExistingMemberIDs... 

Но я прав? Действительно ли запуск ошибки в NSManagedObject помещает в текущий пул автоматического выпуска?Или моя декларация бассейна и истощает для ничего?

1 Ответ

1 голос
/ 14 февраля 2012

Wienke,

Самый простой ответ - создать отдельный контекст управляемого объекта (MOC) внутри пула автоматического выпуска.Таким образом, когда вы закончите с циклом, вы можете очистить все элементы за один раз.С отдельным MOC вам нужно будет прислушиваться к изменениям, но это довольно просто.У Apple есть несколько примеров, показывающих частные MOC только для таких действий.

Andrew

...