iphoneimagenamedinitwithcontentsoffile

mem allocation with imageNamed


I want to display some images, when image is not available I want to show a default one. When using the analyze functionality I get warnings about a potential leak. I do under stand that when using imageNamed there is no memory allocated, what would be a nice workaround ? See below a part of my code

if (!isMyFileThere){
    image = [UIImage imageNamed:@"default.png"];            
}
else{
    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}

Solution

  • This is autoreleased

     image = [UIImage imageNamed:@"default.png"];
    

    This is not

    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
    

    You need to do this :

    image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];
    

    The rule is if your method name begins with alloc, new, copy or muteableCopy you own it and need to release it yourself, either with release or with autorelease. Anything else isn't yours so you mustn't release it.

    If you call retain on an object, you must release (or autorelease) it the same number of times :)