在Core Data中是否有任何标准或首选方法来实现“查找或创建对象”?
我打算在NSManagedObject
子类中使用类方法,但是要确保我获得最佳性能。
例如,缓存提取以避免更多地访问磁盘或浪费时间是否有意义?
答案 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];