伙计们!我正在我的应用程序中实现共享缓存。这个想法是在后台从 Web 获取缓存的数据,然后使用新检索到的数据更新缓存和 UI。诀窍当然是确保线程安全,因为主线程将持续使用缓存。我不想以任何方式修改缓存,而其他人可能正在使用它。
据我了解,使用 @synchronized 锁定对共享资源的访问并不是 ObjectiveC 中最优雅的方法,因为它会陷入内核,因此相当缓慢。我一直在阅读,使用 GCD 是一个很好的选择(让我们暂时忽略它的表亲 NSOperation),我想弄清楚我的情况会有什么好的模式。这是一些示例代码:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// download the data in a background thread
dispatch_async(queue, ^{
CacheData *data = [Downloader getLatestData];
// use the downloaded data in the main thread
dispatch_sync(dispatch_get_main_queue(), ^{
[AppCache updateCache:data];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CacheUpdated" object:nil];
});
});
- 这真的会像我认为的那样做吗?如果是这样,这是迄今为止处理这种情况的最干净的方法吗?有一篇博客文章与我所说的非常接近,但我也想与您再次确认。
- 我在想,只要我只在同一个线程/队列(在我的情况下是 main)上访问共享共享资源并且只在 main 上更新 UI,那么我将有效地实现线程安全。那是对的吗?
谢谢!