Как вы знаете, когда объект NSURLSession был аннулирован iOS?

Я вижу ошибку в своих тестах, где иногда я получаю следующую ошибку iOS:

Фон URL-адрес с идентификатором {GUID} уже существует!

Несмотря на то, что я вызываю invalidateAndCancel в NSURLSession в вызове очистки после каждого теста. Я ищу способ подождать, пока я не уверен, что объект NSURLSession был признан недействительным, прежде чем перейти к следующему тесту.

Ответы

Ответ 1

При создании объекта NSURLSession используйте метод sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue; и укажите себя как делегата.

Затем вы получите обратный вызов в: - (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error;, когда сеанс недействителен.

Вы не можете доверять, что invalidateAndCancel мгновенно остановит все задачи, так как это зависит от задач обработки отмена вызова.

Из заголовка NSURLSession:

/* -invalidateAndCancel acts as -finishTasksAndInvalidate, but issues
* -cancel to all outstanding tasks for this session.  Note task 
* cancellation is subject to the state of the task, and some tasks may
* have already have completed at the time they are sent -cancel. 
*/

Ответ 2

Яблоко

"ВАЖНО

Объект сеанса поддерживает сильную ссылку на делегата, пока приложение выходит или явно аннулирует сеанс. Если ты не аннулировать сеанс, ваше приложение теряет память до тех пор, пока оно не выйдет."

Возможно, делегат равен нулю в недействительном сеансе (если вы всегда используете делегатов). Согласен, но почему нет ответа isValid на сеанс?