假设我有一个开始下载对象的方法,可以从任何线程调用,但我想确保下载是唯一的,也就是说,我不会为同一个对象启动另一个下载如果已经有一个。
强制方法在主线程上执行以确保数据一致性(知道下载是否会异步)是否更好?
- (void)download
{
dispatch_async(dispatch_get_main_queue(), ^{
if (isDownloading == NO) {
// Some preparation
isDownloading = YES;
// Launch asynchronous download
}
});
}
或使用阻止同步机制?
- (void)download
{
@synchronize(self) {
if (isDownloading == NO) {
// Some preparation
isDownloading = YES;
// Launch asynchronous download
}
});
}
或在OSAtomicCompareAndSwap
ivar上使用isDownloading
之类的操作?
表演有不同之处吗?什么是最好的策略?