我已经发布了关于与此相关的不同事情的类似问题,但已经为此苦苦挣扎了大约一周,但无济于事。这一切都归结为这段代码:
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Media"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
[oldFetchRequest setFetchBatchSize:10];
NSArray *medias = [oldContext executeFetchRequest:oldFetchRequest error:&error];
int i = 0;
int count = [oldContext countForFetchRequest:oldFetchRequest error:nil];
NSLog(@"count: %i", count);
while (i < count) {
@autoreleasepool {
NSManagedObject *media = [medias objectAtIndex:i];
[oldContext refreshObject:media mergeChanges:NO];
NSLog(@"i: %i", i);
i++;
}
}
计数应该达到 250 左右,项目的数量media
。在应用程序耗尽内存并崩溃之前,它实际上达到了大约 100。每次运行此代码时,它都会建立越来越多的内存,大概是因为每个都media
包含许多 NSData 属性,其中包括一个大属性。Instruments 显示每次运行代码时内存都会增加。
@autoreleasepool
我添加了尝试解决这个问题,refreshObject:mergeChanges:
但他们没有奏效。
我想要做的是将所有项目从这个商店手动移动到一个新的,因为标准迁移不适用于大数据。这是起点。