Я бы предпочел иметь отдельный (и желательно общий) менеджер (назовем его VideosManager
, например) с экспортированным (возможно, косвенным) доступом к операциям, отдельным управлением очередью, потокобезопасностью + блокировкой и т. д. вместо любого решения в зависимости от иерархии контроллеров.
Вы можете придерживаться своего подхода с помощью модели контроллеров вида, но в большинстве случаев это не очень хорошая идея.
Быстрый образец API для разработки и реализации:
(предположим, что у вас есть Video
интерфейс, реализованный с дополнительной информацией)
@interface VideoManager
+ (instancetype)sharedManager; // returning a shared singleton
- (void)startDownloadOfVideo:(Video *)video;
- (void)cancelDownloadOfVideo:(Video *)video;
- (void)cancelDownloadsExceptForVideo:(Video *)video;
- (BOOL)isDownloadInProgressForVideo:(Video *)video;
@end
Реализация будет обрабатывать и управлять загрузки операций в необходимых очередей (в основном экземпляра соединения и его планирование очереди делегатов), обрабатывать входящие данные, правильно записывать их в файл или выходной поток, позволяя вам динамически управлять потоком в зависимости от ваших потребностей. Это всего лишь быстрая наивная схема, в которой вы можете перебирать и соответствовать вашим требованиям.