在我的应用程序中,我使用dispath_async
在后台线程上每3秒钟调用一次Web服务,并在从coredatda获取记录并在UI上显示之后将响应保存在coredata
中。我的代码是
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[WebService webServicesManager]getDataWithPath:str ResponseBlock:^(NSString* response, NSString* error)
{
if (response != nil) {
// save records in core data
}
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Code here is run on the main thread
[self showNewRecordsFromDB];
});
}
}
}];
});
上面的代码运行正常一段时间,但经过一段时间(约4-5分钟)后,我多次获得相同的数据,即同一记录多次显示在屏幕上。
我的代码中存在线程安全问题或任何其他错误吗?请帮助我克服这个问题。
编辑 - 我用串行队列替换了并发队列 -
dispatch_queue_t = dispatch_queue_create("Messgae Queue",NULL);
dispatch_async(queue, ^{
//rest code same as above
});
我没有遇到任何问题。它还可以,或者我仍然需要为不同的线程使用不同的上下文?