Я выполняю на стороне 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 помещает в текущий пул автоматического выпуска?Или моя декларация бассейна и истощает для ничего?