Like your ImageView, a dispatch call is loaded into async , which is NOT in the main thread and called in some other thread, so there is a delay in receiving data from the URL, and then converting it to UIImage. This process takes a little time, as you know, but you scroll through the table view faster. And, as you know, cellForRowAtIndexPath reuses any cell that is outside the window, so a cell that is reused may NOT retrieve images that you would have previously done when they were in the window. Thus, it loads the wrong data, and then again, when async starts for this particular cell, the cell loads this image, but there is a delay.
To overcome this feature, since Chronch pointed it out, you can leave the image as zero OR you can use AFNetworking own UIImageView, which has an excellent class for loading image images quite elegantly
I will leave a link to it AFNetworking
source share