UIViewController在ARC环境中的didReceiveMemoryWarning

dav*_*ode 12 cocoa-touch objective-c uikit automatic-ref-counting

我正在评估切换到ARC(自动引用计数)和重构以应用于我的代码.在我必须弄清楚的事情中,有这样的:

如果ARC不允许显式释放对象,我该怎么办didReceiveMemoryWarning?目前,我使用该方法释放属于我的控制器的对象,并且可以通过惰性getter轻松检索:

- (void)didReceiveMemoryWarning {
    [_foo release]; _foo = nil;
    [super didReceiveMemoryWarning];
}
Run Code Online (Sandbox Code Playgroud)

和相对懒惰的吸气剂:

- (Foo *)foo {
    if (_foo) {
        return _foo;
    }
    return (_foo = [[Foo alloc] init]);
}
Run Code Online (Sandbox Code Playgroud)

在ARC中实现这样的"模式"似乎是不可能的...所以,我该怎么办?在ARC中,didReceiveMemoryWarning应被视为"已弃用"/无用吗?

dit*_*kin 20

ARC处理保留和释放代码,因此将_foo设置为nil足以允许ARC生成的代码执行发布.您没有明确发布,只需管理对象图,ARC生成的代码将在适当时执行发布.

有关详细信息,请阅读Apple的" 过渡到ARC发行说明"文档.