Я настраиваю объекты для обработки своих загрузок (и других асинхронных или долго выполняющихся задач) в AppDelegate, затем запускаю их по мере необходимости от различных контроллеров. Таким образом, они принадлежат и имеют постоянство в течение всего срока действия приложения.
Лучший способ сделать это - передать их в viewController, который будет нуждаться в них (а не в viewController, «ожидающий» того, что appDelegate будет иметь тот или иной объект, готовый и ожидающий) - внедрение зависимости.
Эти объекты каким-то образом обновляют мою модель, когда заканчивают работу, и, если мне нужно, я использую NSNotifications, чтобы объявить о завершении. Это изолирует меня от беспорядка, который я использовал, пытаясь отменить или поменять местами делегаты в viewWillDisappear и т. Д., Чтобы избежать проблем, с которыми вы сталкиваетесь.