There are several things which we need to keep in mind when we use UIImage as follows:
1. UIImage has 4 class methods to create its autorelease instance and 3 instance methods to load image.
2. When you want to cache the image, so that it can be easily loaded in no time whenever required, you should use:
UIImage *tempImage=[UIImage imageNamed:”test.png”]; where test.png is the image which will get cached at the first time and will remain in the memory untill app exits. But this should be used only when the image is less in memory size, otherwise your app will have less real and virtual memory for further use. This returns autorelease instance of UIImage that means you do not need to care about its release.
3. When you want to load the big memory sized images you should use:
UIImage *tempImage=[UIImage imageWithContentOfFile:[[NSBundle mainBundle] pathForResource:@”test” ofType:@”png”]];
this will not cache the image in the memory for the next time use i.e. when you again load this image this will be loaded from file.
4. When you don’t want autorelease instance i.e you want to manage its alloc free things on your own you should use:
UIImage *tempImage=[[UIImage alloc] initWithContentOfFile:[[NSBundle mainBundle] pathForResource:@”test” ofType:@”png”]];
but you have to release it when you are done with it as follows:
5. Whenever you set the UIImage’s instance to UIImageView’s image property, the retain count of UIImage’s instance increases by 1. So never forget to nil the UIImageView’s image property when you are done with it otherwise the UIImage will remain in the virtual memory and will leak.
UIImageView *imgView=[[UIImageView alloc] initWithImage:tempImage];
//now tempImage’s retain count will get increase by one. So nil the imgView’s image property whenever you are done with tempImage like this:
The difference b/w autorelease and normal instance is that we have to release the normal instance by calling release method to free up the memory.