Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When is the autorelease pool triggered

i have used autorelease throughout my app and would like to understand the behavior of the autorelease method. When is the default autorelease pool drained? is it based on a timer (every 30sec?) or have to be called manually? do I need to do anything to release variables that are flagged with autorelease?

like image 917
Yazzmi Avatar asked Dec 29 '22 09:12

Yazzmi


2 Answers

There are (I'd say) 3 main instances when they are created and release:

1.Beginning and very end of your application life-cycle, written in main.m

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
}

2.Beginning and very end of each event (Done in the AppKit)

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
- (void)loadView 
/* etc etc initialization stuff... */
[pool release];

3.Whenever you want (you can create your own pool and release it. [from apples memory management document])

– (id)findMatchingObject:anObject { 
    id match = nil; 
    while (match == nil) { 
        NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; 
        /* Do a search that creates a lot of temporary objects. */ 
        match = [self expensiveSearchForObject:anObject]; 
        if (match != nil) { 
            [match retain]; /* Keep match around. */ 
        } 
        [subPool release]; 
    } 
    return [match autorelease];   /* Let match go and return it. */
}
like image 143
domino Avatar answered Jan 11 '23 19:01

domino


It is drained whenever the current run-loop finishes. That is when your method and the method calling your method and the method calling that method and so on is all done.

From the documentation:

The Application Kit creates an autorelease pool on the main thread at the beginning of every cycle of the event loop, and drains it at the end, thereby releasing any autoreleased objects generated while processing an event

like image 26
Pascal Avatar answered Jan 11 '23 20:01

Pascal