iOS让任务在后台线程运行线程安全吗?

时间:2015-06-10 05:13:14

标签: ios objective-c multithreading core-data grand-central-dispatch

在我的应用程序中,我使用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

    });

我没有遇到任何问题。它还可以,或者我仍然需要为不同的线程使用不同的上下文?

0 个答案:

没有答案