我正在评估切换到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应被视为“已弃用”/无用吗?
答案 0 :(得分:20)
ARC处理保留和释放代码,因此将_foo设置为nil足以允许ARC生成的代码执行发布。您没有明确发布,只需管理对象图,ARC生成的代码将在适当时执行发布。
阅读Apple的Transitioning To ARC Release Notes文档以获取更多信息。
答案 1 :(得分:0)
你可以做几件事,但都是针对特定应用的。清除数组和字典以及将对象引用设置为nil(ARC的删除对象的方式)。