PS. I do know from listening to Marco Arment (who does Overcast) rant on various podcasts about:
* Apple's Background Downloading API
* How the streaming vs downloaded audio systems in iOS work
That it is no simple task. Just for a tiny example, you'd think that if you stream content to the iOS device, that you could just take that already-streamed-in file and save it for later use (retain the cache). But according to Marco, this is not the case (at all). Because of the sandboxing setup in iOS, the streaming file is available to the OS components, and not to your App's code, and if you want to save it, you have to stop and throw away the stream and save a new download (in "download not streaming mode") all over again from scratch. Which means you can't listen to the files on the fly but then also "keep" them as they stream in, easily. This is how the podcast client I use works too (iCatcher). You can stream files, or download them, but if you decide to download a file you're 1/2 through listening to via streaming, it throws the whole thing out and downloads the whole thing in the background.
You can make this work fairly well with some sleight-of-hand, but...
That's clunky, and doesn't make the best use of sometimes limited cellular data caps, so the best way to do this is to not use the built-in streaming API calls at all, and to roll your own, but... This is no small task. And, from there, you descend down the rabbit hole of not using the built in media player components at all, and so on and so forth.