假设我有一个开始下载对象的方法,该方法可以从任何线程调用,但我想确保下载是唯一的,也就是说,如果有相同的对象,我不会开始另一个下载已经是一个。
强制方法在主线程上执行以确保数据一致性更好(知道无论如何下载将是异步的)?
- (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
在isDownloading
ivar 上的操作?
性能上有区别吗?最好的策略是什么?