Search code examples
iosobjective-cmemory-managementautomatic-ref-countingsparrow-framework

Guarantee a deallocation in ARC


I'm currently developing a game for iOS and we have a memory leak. Our project is ARC set up. I was wondering on how to ensure memory deallocation. One of the steps I was thinking of taking was convert code of the form:

-(void)methodMethod{
    Object* o = [[Object alloc] init];
    // Some logic
}

into:

-(void)methodMethod{
    Object* o = [[Object alloc] init];
    // Some logic
    o = nil; // Explicit nil assignment
}

Is there a difference between the two? What other measures should I take to ensure a dealloc in an ARC setup?

We're using the Sparrow Framework.


Solution

  • Both methods do the same thing. Local objects are set to nil by ARC when they leave scope, so putting in a manual nil does nothing.

    If you want to find a leak - you are far better off actually running it through Instruments with the Leaks tool and finding out what is being leaked, which will give you a better idea of what is going on. It's quite handy for finding retain-cycles.