Класс AVCaptureVideoDataOutput имеет метод, который принимает в очередь.
- (void)setSampleBufferDelegate:(id<AVCaptureVideoDataOutputSampleBufferDelegate>)sampleBufferDelegate
queue:(dispatch_queue_t)sampleBufferCallbackQueue;
AVAssetWriterInput также имеет аналогичный метод с очередью в качестве параметра.
Почему API позволяет абонентам проходить в очереди? По принципу инкапсуляции я думаю, что очередь, в которой вызывается код, должна быть непрозрачной для вызывающей стороны.
Одним из преимуществ будет то, что вызывающая сторона может повторно использовать одну и ту же очередь для нескольких целей, экономя память. (Это будет иметь другие побочные эффекты?)
Недостатком было бы то, что вызывающая сторона могла передавать в несерийные очереди или ошибочные данные.
В альтернативном подходе AVFoundation поддерживает свои собственные очереди под капотом.
Какие преимущества имеет этот API перед альтернативой?