核心数据(魔法记录)在获取时暂停主线程

时间:2014-04-01 03:03:50

标签: ios multithreading core-data nsmanagedobjectcontext magicalrecord

我有一个看起来像这样的方法:

+ (Cat *)fetchCatWithId:(NSString *)catId {
    NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"id ==[c] %@", catId];
    Cat* cat = [Cat MR_findFirstWithPredicate:predicate inContext:context];
    return cat;
}

Xcode Time Profiler在线上显示了相当大的一击

Cat* cat = [Cat MR_findFirstWithPredicate:predicate inContext:context];

事实上,当发生这种情况时,我的应用中的用户界面会暂时冻结。显然我需要在后台线程上执行此操作。所以我有三个问题:

  1. 有没有办法更快地执行提取?

  2. 如果没有,我如何在后台线程上进行提取?

  3. 此方法返回Cat对象。显然,应用程序的其他部分正在请求Cat。那么我现在是否需要为此方法添加一个完成处理程序并重构所有内容以仅在完成执行获取时执行操作?这似乎不对。

1 个答案:

答案 0 :(得分:0)

试试这个:

+ (Cat *)fetchCatWithId:(NSString *)catId {
   Cat *cat = [Cat MR_findFirstByAttribute: @"id" withValue: catID];
   return cat;
}