在Core Data中查找或创建对象的标准?

时间:2014-11-27 16:50:57

标签: objective-c cocoa core-data

在Core Data中是否有任何标准或首选方法来实现“查找或创建对象”?

我打算在NSManagedObject子类中使用类方法,但是要确保我获得最佳性能。

例如,缓存提取以避免更多地访问磁盘或浪费时间是否有意义?

1 个答案:

答案 0 :(得分:2)

班级方法很好。您将不得不点击磁盘进行检索,如果再次成功则不能插入。我没有看到性能受到影响。

如果你这样做了1000次,当然在内存中这样做会更有效率。获取所有相关数据,甚至只获取相关字段(使用NSDictionaryResultType)并使用谓词过滤内存。如果你使用KVC(键值编码),这可能是非常有效和优雅的 - 我使用了类似以下内容的100.000s记录:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:"Entity"];
NSArray *result = [context executeFetchRequest:request error:nil];

NSArray *allIDs = [result valueForKeyPath:@"idAttribute"];
NSArray *existingIDs = [allIDs filteredArrayUsingPredicate:
     [NSPredicate predicateWithFormat:@"self in %@", idsToCheck]];
NSArray *newIDs = [idsToCheck filteredArrayUsingPredicate:
     [NSPredicate predicateWithFormat:@"self not in %@" existingIDs];