我正在做同步例程的iOS端,我正试图保持低内存配置文件。
妈妈有这两个实体:
我需要汇集一些所有masterObjectID字符串的集合,这些字符串是由已经获取的一些条形图的所有fooMembers所拥有的。 要做到这一点,我遍历吧'fooMembers - 我假设它会解决所有foos的错误 - 并提取masterObjectIDs,将它们添加到我的集合中。
masterObjectID字符串不会占用太多内存,但是foos会这样做。
所以我的解决方案是围绕foo的故障烧迭代有一个自动释放池,保留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放入当前的自动释放池?或者我的游泳池宣言和排水是徒劳的?
答案 0 :(得分:1)
Wienke,
最简单的答案是在自动释放池中创建单独的托管对象上下文(MOC)。这样,当您完成循环后,您可以一次清除所有项目。使用单独的MOC,您需要监听更改,但这很简单。 Apple有几个例子显示私人MOC只是为了这些行为。
安德鲁