我正在开发具有db sync机制的应用程序。
我正在调用同步服务,如下所示
[NSThread detachNewThreadSelector:@selector(sync)
toTarget:[SyncService sharedInstance]
withObject:nil];
但问题是,同步不是在后台执行的。结果应用
在同步完成之前,将处于空闲状态。所以,我想过将GCD用作背景
处理并执行以下操作
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[[SyncService sharedInstance]Sync];
});
但即使现在同步也不在后台执行。我希望在
中执行同步背景
编辑:
每当我不使用[NSThread detachNewThreadSelector:@selector(sync)
toTarget:[SyncService sharedInstance] withObject:nil];,
紧接着的下一行[[[SyncService sharedInstance]委托] addObject:self];不是
叫。当我使用GCD(全局队列)时,不会调用此方法。
非常感谢任何帮助。
答案 0 :(得分:1)
您正在使用错误的属性调用dispatch_get_global_queue
方法,第一个0表示DISPATCH_QUEUE_PRIORITY_DEFAULT
或任何其他预定义的优先级:
DISPATCH_QUEUE_PRIORITY_HIGH
,DISPATCH_QUEUE_PRIORITY_DEFAULT
,DISPATCH_QUEUE_PRIORITY_LOW
或DISPATCH_QUEUE_PRIORITY_BACKGROUND
。
您应该将其称为:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[SyncService sharedInstance]Sync];
});
此外,文档还指出调用+detachNewThreadSelector:toTarget:withObject:
将启动一个新线程。你确定没有其他东西阻止UI。你在sync
方法中做了什么,你称之为主线程?这可能意味着主线程/队列将再次阻塞。
答案 1 :(得分:0)
[[SyncService sharedInstance] performSelectorInBackground:@selector(Sync) withObject:nil]
正如rckoenes所说,你应该确定在Sync方法的主线程上没有做任何事情