次のコードを使用して、Core Data の属性の最大値を取得しています
- (NSDate*)latestDateForLocalEntity:(NSString*)entityString
key:(NSString*)key
inManagedObjectContext:(NSManagedObjectContext*)context {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityString];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:YES];
request.sortDescriptors = @[sortDescriptor];
NSError *localError;
NSArray *localResults = [context executeFetchRequest:request error:&localError];
id result = localResults.lastObject;
NSDate *latestLocalDate = [result valueForKey:key];
NSLog(@"Latest local date for entity %@ (%@): %@",entityString,key,latestLocalDate);
// fault newly created objects - don`t need to keep them in RAM:
[localResults enumerateObjectsUsingBlock:^(NSManagedObject *managedObject, NSUInteger idx, BOOL *stop) {
[context refreshObject:managedObject mergeChanges:NO];
}];
// even context reset does not help reducing RAM consumption:
[context reset];
localResults = nil;
return latestLocalDate;
コードはすべてのエンティティを取得し、それらを値で並べ替え、最後のオブジェクトを取得して最大値を取得します。次に、RAM を解放するために値を (再) フォールトしようとします[context refreshObject:managedObject mergeChanges:NO]
。
ただし、メモリは解放されていないようです (約 400.000non-object
オブジェクトがメモリに保持されます)。
オブジェクトを再フォールトしようとして、管理対象オブジェクト コンテキストをリセットしようとしているコードの何が問題になっていますか? メモリを解放しないのはなぜですか?