ThreadedCoreData 案例分析


该案例展示了Core Data在多线程中是如何使用的。这里使用了Thread Confinement模式。有两个线程,分别为主线程和后台线程,两个线程中各有自己的NSManagedObjectContext。并且这两个context共享一个persistentStoreCoordinator


首先,利用NSURLConnection异步从服务器获取数据信息,数据获取成功之后,建立一个NSOperation,在后台线程中解析获取的数据,生成NSManagedObject对象,然后将objects插入到后台线程中的context中,然后save 该context。以上这些操作都是在后台线程中执行的。


当后台context save之后,会发送通知,主线程中注册了该通知,就会获取该事件。在主线程中得到该通知,将变化合并到主线程的context中。然后刷新UI。


这里需要注意的一点是,当通知发生的时候,回调方法的执行是在后台线程中的,因此需要保证线程安全,将control dispatch 到主线程中,然后再执行和并操作。


通过这种方式可以做到耗时的Core Data 操作在后台线程中执行,而UI线程也不会被阻塞。


在Core Data中使用主线程有很多中原因,但很主要的原因就是为了主线程不会被阻塞。但是这么做带来的麻烦就是,由于Core Data是非线程安全的,会带来的线程安全问题,使程序的复杂性会提高。