【发布时间】:2015-08-06 06:18:10
【问题描述】:
我有两种在串行队列上运行的方法。每个方法都返回某个类的副本。我正在尝试实现线程安全解决方案,同时保持数据完整性。
例如:
-(Users *) getAllUsers
{
__block copiedUsers;
dispatch_sync(_backgroundQueue, ^{
copiedUsers = [self.users copy]; // return copy object to calling thread.
});
return copiedUsers;
}
-(Orders *) getAllOrders
{
__block copiedOrders;
dispatch_sync(_backgroundQueue, ^{
copiedOrders = [self.Orders copy]; // return copy object to calling thread.
});
return copiedOrders;
}
除了这两种方法之外,我还有一个添加/删除用户和订单的工作类,所有这些都通过串行队列backgroundQueue 完成。
如果在主线程中我调用getAllUsers,然后在另一个之后调用getAllOrders,我的数据完整性是不安全的,因为在这两个调用之间工作类可能已经改变了模型。
我的问题是如何为调用者提供一个允许多个方法以原子方式运行的良好接口?
【问题讨论】:
标签: ios objective-c iphone multithreading