Работа с открытыми асинхронными веб-запросами при извлечении UIViewController (AFNetworking)

Вот сценарий:

- UIViewController (A) помещается в стек навигации
-On viewDidLoad вызывается асинхронный GET с использованием AFNetworking (одноэлементный AFHTTPClient, общий для всего приложения) для заполнения различных пользовательских элементов в представлении (скажем, UILabel).
- Пользователь нажимает кнопку «Назад» до возврата запроса
- Предположим, что другие активные контроллеры представления могут делать запросы, поэтому вы не можете отменить все открытые операции

. Итак, вопрос № 1: следует ли отслеживать открытые запросы, сделанные UIViewController A, и отменять невыполненные запросы, когда пользователь покидает это представление, или вы должны позволить им закончить и игнорировать их? Поскольку AFNetworking использует блоки, обновляемые пользовательские элементы сохраняются внутри блока и, следовательно, не вызывают сбоя при выполнении блока успеха/неудачи после извлечения представления. Однако недостатком их игнорирования является ненужный сетевой трафик.

Вопрос №2: где бы вы выполнили код для отмены операций, выполняемых UIViewController A? viewDidDisappear не кажется правильным, потому что пользователь мог перейти вперед (поместить новое представление в стек), а не назад (извлечь текущее представление), и в этом случае вы не хотите отменять открытые запросы, потому что пользователь может прийти вернуться к текущему виду, и он больше не будет загружаться. Тем не менее, я не думаю, что Dealloc или viewDidUnload будут вызываться во время выполнения запроса, поскольку блок будет удерживать пользовательские элементы, поэтому я не думаю, что он может туда пойти.

Буду признателен за мысли по этому поводу. Что, по вашему мнению, является лучшей практикой?

13
задан Joel 12 April 2012 в 01:59
поделиться