A good performing solution with decent results is StackBlur which uses a clever  algorithm that efficiently approximates a blur:
This is a compromise between Gaussian Blur and Box blur It creates
  much better looking blurs than Box Blur, but is 7x faster than my
  Gaussian Blur implementation. I called it Stack Blur because this
  describes best how this filter works internally: it creates a kind of
  moving stack (or maybe a "Tower of Hanoi" kind of structure) of colors
  whilst scanning through the image. This "tower" controls the weights
  of the single pixels within the convolution kernel and gives the pixel
  in the center the highest weight. The secret of the speed is that the
  algorithm just has to add one new pixel to the right side of the stack
  and at the same time remove the leftmost pixel. The remaining colors
  on the topmost layer of the stack are either added on or reduced by
  one, depending on if they are on the right or on the left side of the
  stack.
Check out StackBlur on Github.
There are many versions out there, also Swift ports, but those are considerable slower than the Obj-C versions.
Addition 2019:
If the images to blur are remotely loaded, I can highly recommend the Nuke framework that remotely loads images and can apply a blur filter out of the box. It's application is comparable to the Glide library on Android. While blurring one image may be easy, blurring many images - like in a collection view - while considering device resource constraints is less trivial. Nuke is highly optimized for remote image loading, caching and processing. It is also extendable in several aspects. From comparing available remote image loading frameworks, I think that Nuke is the most stable and most advanced for that purpose as of Nov 2019.