UIViewController在ARC环境中的didReceiveMemoryWarning

时间:2011-10-14 10:52:11

标签: objective-c cocoa-touch uikit automatic-ref-counting

我正在评估切换到ARC(自动引用计数)和重构以应用于我的代码。 我需要弄清楚的是:

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

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

和相对懒惰的吸气者:

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

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

2 个答案:

答案 0 :(得分:20)

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

阅读Apple的Transitioning To ARC Release Notes文档以获取更多信息。

答案 1 :(得分:0)

你可以做几件事,但都是针对特定应用的。清除数组和字典以及将对象引用设置为nil(ARC的删除对象的方式)。