Is there an autorelease pool in class methods?
        Posted  
        
            by mystify
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by mystify
        
        
        
        Published on 2010-05-08T17:28:55Z
        Indexed on 
            2010/05/08
            17:38 UTC
        
        
        Read the original article
        Hit count: 224
        
iphone
|memory-management
I have an class method which generates an UIView, like this:
+ (UIImage*)imageWithFileName:(NSString*)imgFile {
    UIImage *img = nil;
    NSBundle *appBundle = [NSBundle mainBundle];
    NSString *resourcePath = [appBundle pathForResource:imgFile ofType:nil];
    if (resourcePath != nil) {
        NSURL *imageURL = [NSURL fileURLWithPath:resourcePath];
        NSData *data = [[NSData alloc] initWithContentsOfURL:imageURL];
        img = [UIImage imageWithData:data]; // should be autoreleased!!
        [data release];
    }
    return img;
}
However, when I use this, the image data is NEVER freed. There is definitely a memory bug with this, although I didn't break any memory management rule I am aware of. My guess is that because this is a class method which gets called from instance methods, There is no active autorelease pool in place or it's one that only gets drained when I quit the app. Could that be right?
© Stack Overflow or respective owner