Может кто-нибудь выполнить завершениеблок из ASIHTTPREQUEST / AFNETWORKING на фоновой нити?
-
13-11-2019 - |
Вопрос
Я начну свой asihtttprequest синхронно в отдельной резьбе, как это:
//inside this start method I create my ASIHTTPRequest and start it
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[process start];
});
.
Но завершитеблок все еще уволен на главной ните.
Единственное, что я могу придумать, чтобы решить, что это необходимо определить очередь рассылки и вручную выполнить завершение блокировки в том же потоке, что удерживает ссылку на созданную очередь.Но это не решает это напрямую, потому что вы пройдете к более мягкому моменту в главной ните перед перенаправлением остальной части кода к созданной очереди рассылки.
У кого-то есть лучшее решение?
Редактировать: то же самое верно для блоков завершения AFNetWorking ...
Решение
ОК, чтобы ответить на мой вопрос: ASIHTTPREQUEST Framework не имеет возможности начать заканчивать блоки в другом потоке.
вместо этого можно использовать Framework afnetwork.Здесь у вас есть два свойства на любом типе AFOPERATION под названием «
Надеюсь, это поможет другим с той же проблемой!
Обновление: пример
dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue", NULL);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:yourRequest];
operation.successCallbackQueue = requestQueue;
operation.failureCallbackQueue = requestQueue;
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// add code for completion
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// add code for failure
}];
[operation start];
. Другие советы
Попробуйте использовать определенную очередь вашего собственного создания.Затем вы можете (как только он, наконец, заканчивается, в его завершении блокировки) сигнал обратно в глобальную очередь, чтобы обновить любой необходимый дисплей.