我正在使用核心数据的应用程序,我知道这不是线程安全的,但正在努力了解如何正确地pipe理这个。 让我解释我到目前为止… 我创build了一个启动pipe理对象的单例,然后可用于所有其他类,因为所有类都接收到相同的pipe理对象地址,所以这似乎正常工作。 然后我有两个按这个顺序执行的类 数据加载。 这将获得logging计数,如果零加载核心数据库。 Tableview然后显示在步骤1中存储的数据。 我的问题是第1步。总是返回零logging,第2步。工作并返回正确的logging计数。 已经做了一些testing与1的问题。是由于它的线程运行,如果我发送请求在同一个线程上创build的pipe理对象完美的作品。 那么,为什么它在第一课。我必须确保请求是在正确的线程,但在第二课。它只是运作,或者它只是纯粹的运气。 有线程和核心数据的推荐和文档化方法吗? 谢谢
我试图通过同步地从后台线程运行它 – [NSString stringWithContentsOfURL:encoding:error:]asynchronous。 __block NSString *result; dispatch_queue_t currentQueue = dispatch_get_current_queue(); void (^doneBlock)(void) = ^{ printf("done! %s",[result UTF8String]); }; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { result = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/"] encoding:NSUTF8StringEncoding error:nil]; dispatch_sync(currentQueue, ^{ doneBlock(); }); }); 它的工作正常,最重要的是,它的asynchronous。 我的问题是,如果这样做是安全的,还是可以有任何线程问题等? 提前致谢 :)