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

LFH*_*FHS 1 ios appdelegate swift

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

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

正如您所看到的,它已声明AppDelegatefinal使得insomnia变量未被释放,这将阻止它工作.但是,我不确定,这是不好的做法宣布我AppDelegatefinal?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,有没有更好的方法来确保insomnia不被解除分配?

Rob*_*Rob 5

你说:

正如您所看到的,它已声明为AppDelegate,final因此insomnia变量未被释放...

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

最重要的是,您不必final在此上下文中使用.

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


在回答你的问题时,这是否是一个可以接受的声明的地方insomnia,是的(但final不需要).该AppDelegate应用程序运行时不会被释放,它就是我们通常把"应用程序生命周期"相关的代码.