iOS Core Data and multithread
對於我們初學Core Data的人來說,在Xcode 5的時代,若要使用Core Data來存儲資料,第一件事就是在建立專案的時候只能選擇空的應用程式,才能有勾選使用Core Data的選項。如果選擇建立single view專案的話,那就沒有使用Core Data選項可選了。所以網路[1]上有不少人在討論,若已經建立專案,而當初沒有勾到Core Data選項時,該如何加入之。還好,到了XCode 6, 現在single view專案,已經有Core Data選項可以選了。 但是預設建立的Core Data, 在讀寫資料時,其實是以UI Thread來作業的。也就是說和所有UI有關的元件共用主要的Thread。這樣一來,最明顯的問題,就是在做Import/Export工作的時候,會造成App卡住的現象。 以簡單的新增資料數筆至Core Data來做實驗,就會發現,當新增的資料愈多時,卡住的時間就會愈久。如以下程式: AppDelegate *delegate = ( AppDelegate *)[[ UIApplication sharedApplication ] delegate ]; Xxx *xx; for ( int i= 0 ; i xx = [ NSEntityDescription insertNewObjectForEntityForName : @"Xxx" inManagedObjectContext :delegate.managedObjectContext]; xx. startDate = [ NSDate date ]; xx. stopDate = [xx. startDate dateByAddingTimeInterval :( arc4random () % 7200 + 1 )]; ...