CPU が 100% になり、メイン スレッドがバックグラウンド キューでブロックされる可能性はありますか。私はそのようにします:
まず、カスタム セッターでコンテキストを作成します。
-(void)setContext:(NSManagedObjectContext *)context {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
_context = context;
});
}
次に、使用していくつかのデータをダウンロードNSURLConnectionDataDelegate
し、挿入する方法を次に示します。
-(void)connectionDidFinishWithObject:(NSArray*)arrayOfObjects {
dispatch_queue_t fetchQ = dispatch_queue_create("myDispatch", NULL);
dispatch_async(fetchQ, ^{
[self.context performBlock:^{
for(NSDictionary *dic in myArr) {
[Tournament tournamentWithDictionary:dic inMOC:self.context];
}
}];
}
}
そして、ここにNSManagedObject
サブクラスへの私の挿入があります:
+(Tournament*)tournamentWithDictionary:(NSDictionary*)dictionary inMOC:(NSManagedObjectContext*)moc {
Tournament *finalElement;
if(!finalElement) {
finalElement = [NSEntityDescription insertNewObjectForEntityForName:@"Tournament" inManagedObjectContext:moc];
[finalElement setTournamentID:[NSNumber numberWithInt:[[dictionary objectForKey:@"ID"] integerValue]]];
}
return finalElement;
}
CPU 使用率が 100% になり、インターフェイスがブロックされています。どうして?!