I want to display so many images in table cells. I knew two methods to show an image.
One is creating an instance to UIImageView and show it
CGRect rect=CGRectMake(x,y,width,height);
UIImageView *image=[[UIImageView alloc]initWithFrame:rect];
[image setImage:[UIImage imageNamed:@"sample.jpg"]];
Another method is,
CGRect rect=CGRectMake(x,y,width,height);
[[UIImage imageNamed:@"sample.jpg"] drawInRect:rect];
Now, my question is, what is the difference between these two? Which one is efficient? Or someother function is available better than this?
Thanks in advance....
UIImageView
is aUIView
subclass. By adding it to the view hierarchy you get all the free benefits: animations, size properties, affine transoforms, etc. Plus, you are able to change the underlyingUIImage
any time you want.On the other hand, calling
drawInRect:
will just draw the image where you tell it to, but not interact with theUIView
hierarchy, so you don't gain any of the benefits from having it on the view hierarchy.I would think (have not tried it), that drawing the image directly is faster, but I would think in most of the cases having a
UIImageView
is a better idea.Using the
drawInRect:
method has CoreGraphics draw the image into the activeCGContext
using the CPU. Assuming you're in aUIView
'sdrawRect:
method, this will paint the image into the view's buffer.UIImageView
uses whichever image is assigned to it as it's backing buffer instead of using the slowerdrawRect:
. The GPU then references this buffer directly when the screen is composited via QuartzCore.