在Swift中将AppDelegate类声明为“final”是不好的做法吗?

时间:2017-12-07 18:08:53

标签: ios swift appdelegate

现在,我正在尝试使用Git中的一个名为Insomnia的类来阻止设备在充电时锁定。如果你很好奇,project就在这里。对于示例代码,它让我这样做:

final class AppDelegate: UIResponder, UIApplicationDelegate {
      private let insomnia = Insomnia(mode: .whenCharging)
      //app delegate code
 }

正如您所看到的,它已将AppDelegate声明为final,以便insomnia变量不会被释放,这会阻止它工作。但是,我不确定,将AppDelegate声明为final这是不好的做法吗?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,是否有更好的方法确保insomnia未被解除分配?

1 个答案:

答案 0 :(得分:5)

你说:

  

如您所见,您已将AppDelegate声明为final,以便insomnia变量未被释放...

这不是final所做的。它只是表示该类不能被子类化(在应用程序委托的情况下,它不可能是相关的)。 final关键字还允许一些优化(如果您有代码调用这些方法中的任何一个,它可以使用静态分派而不是动态分派),这种情况下不太可能产生任何可观察到的影响。

从底线开始,您不必在此上下文中使用final

“最佳实践”是在您需要的地方使用final,即类实际上不能或不应该被子类化,或者您真正需要静态调度提供的性能差异。

在回答您的问题时,这是否是一个可以接受insomnia声明的地方,是的是(但不需要final)。应用程序运行时AppDelegate未发布,而且我们通常会将“app lifecycle”相关代码放在此处。