【问题标题】:Is -didReceiveMemoryWarning useful anymore if I am using ARC?如果我使用 ARC,-didReceiveMemoryWarning 是否有用?
【发布时间】:2014-03-07 02:23:41
【问题描述】:

当我在 Xcode 中创建 UIViewController 的新子类时,它带有默认方法,例如 init 和 viewDidLoad。最后一个是didReceiveMemoryWarning。这让我想,如果我使用 ARC,我应该担心这个吗?这是默认方法。

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

这里的关键字是 dispose。由于在使用 ARC 时我无法在任何对象上显式调用 release,我是否应该实现此方法?

【问题讨论】:

  • 是的!例如,具有 1000 个对象和 0 个对象的 NSArray 之间存在很大差异。

标签: ios objective-c memory-management


【解决方案1】:

是的。使用 ARC 或 MRC 没有区别。无论哪种方式,您的应用都可能收到内存警告。使用didReceiveMemoryWarning 清理您可以清理的任何内存,例如清空缓存或诸如此类。

您仍然可以清理 ARC 下的对象,以便将它们释放。您只需要删除对对象的所有引用。

【讨论】:

    【解决方案2】:

    是的,您应该实施它,即使您只是“按原样”保留它。只需调用[super didReceiveMemoryWarning],您就可以让您的应用程序在内存不足的情况下清理内存(这可能是由您的应用程序以外的其他原因引起的),例如释放缓存的图像(例如,通过 imageNamed 或 Storyboard 加载)或视图目前不可见。

    一篇好文章:Managing Memory Level Warnings

    【讨论】:

    • 实现只调用[super didReceiveMemoryWarning]的方法其实和根本不实现是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多