2016-08-15 2 views
0

Мне нужно запустить несколько NSOperations для загрузки таблицы с видео с AWS S3 (две операции в строке таблицы), но после выбора строки в таблице я хочу передать эти связанные операции с этой строкой таблицы на следующий контроллер представления для продолжения загрузки и загрузки других видеороликов. Затем я приостановил другие операции из других строк таблицы и возобновил их, когда вернусь к контроллеру табличного представления.NSOperationQueue для каждой строки UITableView

Безопасно ли иметь NSOperationQueue для каждой строки UITableView? Есть ли лучший способ добиться того, чего я хочу?

ответ

1

Я бы предпочел иметь отдельный (и желательно общий) менеджер (назовем его 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 

Реализация будет обрабатывать и управлять загрузки операций в необходимых очередей (в основном экземпляра соединения и его планирование очереди делегатов), обрабатывать входящие данные, правильно записывать их в файл или выходной поток, позволяя вам динамически управлять потоком в зависимости от ваших потребностей. Это всего лишь быстрая наивная схема, в которой вы можете перебирать и соответствовать вашим требованиям.