批量将managedObjects添加到Core Data?

时间:2012-10-04 20:43:43

标签: iphone objective-c cocoa-touch core-data

以下显示了我已添加到NSManagedObject的子类以填充单个实体并将其添加到Core Data的方法。我有大约1000个对象要添加到数据库(我在循环中做,而不是如下所示的列表)我的问题是关于性能,是否逐个添加1000个对象中的每一个核心数据(我认为它确实如此)。有没有办法存储每个托管对象,并以单一(更快)的方式添加它们。

NSManagedObjectContext *context = [[self managedDocument] managedObjectContext];
[Atomal createAtomalInContext:context withName:@"H11" age:@57 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H23" age:@22 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H54" age:@11 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H34" age:@98 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H17" age:@35 andType:@"Nantar"];

+ (Atomal *)createAtomalInContext:(NSManagedObjectContext *)context withName:(NSString *)name age:(NSNumber *)age andType:(NSString *)type {
    Atomal *atomal = nil;
    atomal = [NSEntityDescription insertNewObjectForEntityForName:@"Atomal" inManagedObjectContext:context];

    // POPULATE PROPERTIES
    [atomal setName:name];
    [atomal setAge:age];
    [atomal setType:type];
    NSLog(@"CORE: Adding >>> %@ %@ %@", [atomal name], [atomal age], [atomal type]);
    return atomal;
}

1 个答案:

答案 0 :(得分:4)

这应该没问题。如果你真的担心性能而且实际上你的实现存在问题,那么你应该分析并获得真正的结果,而不仅仅是征求意见。

说这应该相当便宜,因为所有托管对象都是在内存中创建的 - 当你调用save:时,核心数据开始出现在磁盘上。击中磁盘的IO是缓慢的部分,因此如果你确保将其保持在最低限度,你应该没问题。

再次,你在这里做的更贵的事情之一是日志记录,这是IO输出到日志,如果你在紧密循环中进行大量日志记录,你可以真正注意到这种效果。