Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIViewController's didReceiveMemoryWarning in ARC environment

I'm evaluating the switch to ARC (automatic reference counting) and the refactoring to apply to my code. Among the things I have to figure out, there is this:

what should I do in didReceiveMemoryWarning if the explicit release of objects is not allowed by ARC? Currently, I use that method to release objects belonging to my controller and that are easily retrievable via lazy getters:

- (void)didReceiveMemoryWarning {
    [_foo release]; _foo = nil;
    [super didReceiveMemoryWarning];
}

and the relative lazy getter:

- (Foo *)foo {
    if (_foo) {
        return _foo;
    }
    return (_foo = [[Foo alloc] init]);
}

It seems impossible to implement such "pattern" in ARC… so, what should I do? Should didReceiveMemoryWarning be considered "deprecated"/useless in ARC?

like image 472
daveoncode Avatar asked Oct 14 '11 10:10

daveoncode


1 Answers

ARC handles the retain and release code so setting _foo to be nil is sufficient to allow the ARC generated code to perform the release. You don't explicitly release, you simply manage your object graph and the ARC generated code will perform the release when appropriate.

Read Apple's Transitioning To ARC Release Notes document for more information.

like image 82
ditkin Avatar answered Nov 16 '22 04:11

ditkin