1

假设我有一个开始下载对象的方法,该方法可以从任何线程调用,但我想确保下载是唯一的,也就是说,如果有相同的对象,我不会开始另一个下载已经是一个。

强制方法在主线程上执行以确保数据一致性更好(知道无论如何下载将是异步的)?

- (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
        }
    });
}

或使用像OSAtomicCompareAndSwapisDownloadingivar 上的操作?

性能上有区别吗?最好的策略是什么?

4

0 回答 0