我的项目中是否需要'覆盖func didReceiveMemoryWarning(){}'?

时间:2016-05-16 14:16:11

标签: swift macos

我在这里收到错误

override func didReceiveMemoryWarning() {

错误:方法不会覆盖它的任何超类。

问题:

代码override func didReceiveMemoryWarning()是否必须在我的项目中?

抱歉我的英语不好。

3 个答案:

答案 0 :(得分:7)

不,你没有。删除它直到你需要它。

令人震惊,我知道,因为它是推荐的,它在模板中。但是在iOS开发的这些年里,我实际上只有四到五次有用的东西(其中大部分都是在iPhone 3GS时代,当时内存更加有限)。坦率地说,对于新开发人员,我只是将其搁置,直到您准备好担心在该级别优化资源利用率。我认为这会造成比它解决的更多混乱。你绝对不应该把它放在那里,除非你也进行测试以确保你的记忆警告代码有效。

正如Alessandro所说,此方法仅适用于UIViewController子类。 (对于其他类型,您可以观察UIApplicationDidReceiveMemoryWarningNotification。)但是您不应该只是将它留在那里,因为它是模板的一部分,或者因为有人告诉您应该拥有它。如果你没有任何有意义的内存要释放(老实说,查看控制器很少应该),那么你应该摆脱覆盖。

答案 1 :(得分:0)

Apple developer library说:

  

当应用收到内存警告时发送给视图控制器。

     

您的应用从不直接调用此方法。相反,这种方法是   当系统确定可用内存量时调用   很低。

     

您可以覆盖此方法以释放所使用的任何其他内存   你的视图控制器。如果你这样做,你实现这个方法   必须在某个时候调用超级实现。

可能您尝试将此方法设置为view controller不同的类类型。

正确

class MyClass: UIViewController {    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

这是错误

class MySwitch: UIControl {
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

enter image description here

答案 2 :(得分:0)

您在此处收到错误,因为您使用的是didReceiveMemoryWarning()关键字。

override关键字声明“此方法会覆盖超类中具有相同名称(override)的方法。”

但如果超类没有didReceiveMemoryWarning(),那么你就不会覆盖它,但你说你是。那是一个错误。

将所有方法一起删除,或者使您的类成为实现该方法的类的子类。