Apparently I was on the right track and due to lack of attention it didn't work. (had problem with retain cycle)
Using the two links I provided in the question, I eventually managed to solve the problem by using the setImageWithURLRequest:placeholderImage:success:failure:
for the placeholder, and on the success block, make another use of the setImageWithURLRequest:placeholderImage:success:failure:
method - this time for the original image.
I'll provide a code snippet of my solution - might help someone in the future:
//Protect against retain cycle
__weak UIImageView *weakBg = bg;
//get the placeholder - note the placeholderImage parameter is nil (I don't need a placeholder to the placeholder
[bg setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:placeholderURL]]
placeholderImage: nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
UIImageView *strongBg = weakBg; // Make local strong reference to protect against race conditions
if (!strongBg) return;
//Protect against retain cycle
__weak UIImageView *weakBg = strongBg;
//Get the original bg with the low quality bg as placeholder
[strongBg setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:originalBgImageURL]]
placeholderImage:image
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
UIImageView *strongBg = weakBg; // Make local strong reference to protect against race conditions
if (!strongBg) return;
//Do stuff
} failure:NULL];
} failure:NULL];