У меня есть пользовательский интерфейс, в котором один и тот же URL-адрес изображения может быть запрошен несколькими UIImageViews в разное время. Очевидно, что если запрос от одного из них завершен, то возврат кэшированной версии работает, как и ожидалось. Однако, особенно в более медленных сетях, я хотел бы иметь возможность совмещать запросы URL-адреса изображения с любым текущим/ожидающим HTTP-запросом для того же URL-адреса.
На HTTP-сервере это называется объединением запросов, и я хотел бы сделать то же самое в клиенте — объединить разные запросы для одного и того же URL-адреса в один запрос, а затем выполнить обратный вызов отдельно для каждого из вызывающих абонентов). Запросы для этого URL-адреса не запускаются одновременно.
Как лучше всего это сделать?
Я думаю, что переписать UIImageView + AFNetworking может быть самым простым способом:
- проверьте af_sharedImageRequestOperationQueue, чтобы узнать, есть ли у него операция с тем же запросом
- если у меня уже есть операция в очереди или запущенная, добавьте себя в некоторый список обратных вызовов/блоков, которые будут вызываться при успехе/неуспехе
- если у меня нет операции, то создайте ее как обычно
- в setCompletionBlockWithSuccess для вызова каждого из блоков по очереди.
Есть более простые альтернативы?