小编And*_*rew的帖子

dispatch_async vs dispatch_sync执行顺序

我有一个创建的串行调度队列:

dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
Run Code Online (Sandbox Code Playgroud)

我想使用这个串行队列来确保类访问的线程安全性,同时自动异步工作,不需要返回调用线程.

- (void)addObjectToQueue:(id)object
{
    dispatch_async(serialQueue, ^{
        // process object and add to queue
    }); 
}

- (BOOL)isObjectInQueue:(id)object
{
    __block BOOL returnValue = NO;
    dispatch_sync(serialQueue, ^{
        // work out return value
    });
    return returnValue;
} 
Run Code Online (Sandbox Code Playgroud)

如果我调用addObjectToQueue:方法,然后立即调用isObjectInQueue:方法,它们是否保证以相同的顺序执行,或者is/In将首先执行isObjectInQueue?

换句话说,dispatch_async执行与dispatch_sync完全相同(立即调度块),除了它不阻塞调用线程?

我已经看到类似的问题,答案是双向的,所以我正在寻找一个明确的答案,最好用Apple文档支持.

concurrency sync objective-c grand-central-dispatch dispatch-async

9
推荐指数
1
解决办法
6886
查看次数

如何判断iOS应用程序是否已重新安装或更新?

我目前在应用程序商店有一个应用程序,我打算很快提交更新.

有了这个更新,我想添加代码,告诉应用程序首次运行时application:didFinishLaunchingWithOptions是否:

  1. 来自应用商店的新安装.
  2. 从以前的版本新更新

目前应用程序商店中的应用程序中没有代码可以处理此问题.
该应用程序使用SQLite数据库,但由于我不会进入这里的原因,我不想使用检查它的存在作为这个问题的解决方案.

作为一个附带问题,如果没有手动存储数据,我是否可以使用SDK来查询应用程序何时安装到设备上?(最好与iOS 3.0兼容)

我见过类似的问题,但没有一个答案适用于使用现有的应用商店代码.

migration objective-c ios

8
推荐指数
2
解决办法
7497
查看次数