Стартовый стек операции AFJSONRequestOperation

Допустим, у меня есть что-то вроде этого:

AFJSONRequestOperation *operation = ...

[operation start];

Когда вызывается запуск операции, где находится эта операция? В какой очереди? Есть ли какая-либо глобальная (для класса) очередь операций, в которую помещена эта операция, и я могу получить доступ к этой операции?

Поскольку мне нужно было бы вызвать (в некоторых случаях) [операция остановится] (может быть, не так, а просто удалить операцию из очереди и остановить ее) из другого метода, есть ли способ сделать это?

Или я должен использовать переменную экземпляра AFJSONRequestOperation, а затем получить к нему доступ таким образом? Хотя у меня много разных операций, и это заставило бы меня создать много переменных экземпляра, так что, если есть какой-то другой способ.

Спасибо.

1 ответ

Решение

Я не особенно знаком с AFNetworking, но насколько я знаю AFJSONRequestOperation использования NSURLConnection внутренне.

Если вы просто позвоните start на самой операции он выполнит запрос в фоновом потоке, предоставленный NSURLConnection, Поэтому он не будет ни в одной очереди. Вы должны хранить ссылку на операцию самостоятельно, чтобы предотвратить ее освобождение, и использовать какой-либо обратный вызов или блок для обработки результатов, возможно, что-то, предоставленное AFJSONRequestOperationили через Key Value Observing isFinished собственность NSOperation,

В качестве альтернативы, потому что AFJSONRequestOperation является NSOperation Вы можете добавить это к NSOperationQueue что вы создали или, возможно, один предоставлен какой-то другой фреймворк. В этом случае NSOperationQueue позвоню start метод для вас, и управлять временем жизни объектов в процессе его обработки. Опять же, вам придется определить наилучший способ обработки результатов после завершения операции.

Другие вопросы по тегам