iOS запускает задачу в фоновом потоке?

В моем приложении я вызываю веб-службу каждые 3 секунды в фоновом потоке, используя dispath_async, и сохраняю ответ в coredata после этого извлекаю записи из coredatda и отображаю в пользовательском интерфейсе. Мой код

 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

    });

и у меня нет проблем. Это нормально или мне все еще нужно использовать другой контекст для другого потока?


person Bharat    schedule 10.06.2015    source источник
comment
Основные данные не являются потокобезопасными, и ваш код взаимодействует с основными данными в двух разных потоках. Это безумие.   -  person matt    schedule 10.06.2015
comment
так что, пожалуйста, вы можете сказать мне, как это решить?   -  person Bharat    schedule 10.06.2015
comment
stackoverflow.com /вопросы/7540801/   -  person matt    schedule 10.06.2015
comment
Последовательная очередь = блокировка данных, так что теперь вы гарантируете, что не обращаетесь к основным данным в двух потоках одновременно. Это хорошо! (Но Core Data по-прежнему не является потокобезопасным, поэтому я не знаю, гарантированно ли это будет безопасно. Давайте подождем, пока ответит кто-то, кто знает больше, чем я, о многопоточности Core Data...)   -  person matt    schedule 10.06.2015
comment
Спасибо за информацию. Я реализовал это с помощью последовательной очереди, и до сих пор моя команда тестирования довольна этим: P   -  person Bharat    schedule 10.06.2015