ARC memory leaks

You’re probably running this code on a background thread, and don’t have an autorelease pool in place. ARC will still autorelease objects for you on occasion, and if you’re calling into Apple frameworks, they may still be non-ARC, so they definitely could be autoreleasing objects for you. So you still need an autorelease pool in place.

Cocoa creates an autorelease pool for you on the main thread, but doesn’t do anything for you on background threads. If you’re going to kick something off onto a background thread without using NSOperation or something, you’ll want to wrap that thread in an @autoreleasepool, like so:

- (void)doSomething {
    [self performSelectorInBackground:@selector(backgroundSomething)];
}

- (void)backgroundSomething {
    @autoreleasepool {
        NSLog(@"Here I am in the background, doing something.");
        myArray = [[NSMutableArray alloc] init];
        // etc.
    }
}

Leave a Comment