Is it better to autorelease or release right after?

iphone, memory-management, uikit

Solution

In most cases, it wont really matter either way. Since `-autorelease` simply means that the object will be released at the end of the current iteration of the run loop, the object will get released either way.

The biggest benefit of using `-autorelease` is that you don't have to worry about the lifetime of the object in the context of your method. So, if you decide later that you want to do something with an object several lines after it was last used, you don't need to worry about moving your call to `-release`.

The main instance when using `-release` will make a noticeable difference vs. using `-autorelease` is if you're creating a lot of temporary objects in your method. For example, consider the following method:

- (void)someMethod {
    NSUInteger i = 0;
    while (i < 100000) {
        id tempObject = [[[SomeClass alloc] init] autorelease];

        // Do something with tempObject

       i++;
    }
}

By the time this method ends, you've got 100,000 objects sitting in the autorelease pool waiting to be released. Depending on the class of `tempObject`, this may or may not be a major problem on the desktop, but it most certainly would be on the memory-constrained iPhone. Thus, you should really use `-release` over `-autorelease` if you're allocating many temporary objects. But, for many/most uses, you wont see any major differences between the two.

Problem

There are a lot of cases in which one would alloc an instance, and release it right after it's being assigned to something else, which retains it internally. For example, ``` UIView *view = [[UIView alloc] initWithFrame...]; [self addSubView:view]; [view release]; ``` I have heard people suggesting that we go with autorelease rather than release right after. So the above becomes: ``` UIView *view = [[[UIView alloc] initWithFrame...] autorelease]; [self addSubView:view]; ``` What's the best practice here? Pros and cons?

Original source