现在,我正在尝试使用Git中的一个名为Insomnia的类来阻止设备在充电时锁定。如果你很好奇,project就在这里。对于示例代码,它让我这样做:
final class AppDelegate: UIResponder, UIApplicationDelegate {
private let insomnia = Insomnia(mode: .whenCharging)
//app delegate code
}
正如您所看到的,它已将AppDelegate
声明为final
,以便insomnia
变量不会被释放,这会阻止它工作。但是,我不确定,将AppDelegate
声明为final
这是不好的做法吗?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,是否有更好的方法确保insomnia
未被解除分配?
答案 0 :(得分:5)
你说:
如您所见,您已将
AppDelegate
声明为final
,以便insomnia
变量未被释放...
这不是final
所做的。它只是表示该类不能被子类化(在应用程序委托的情况下,它不可能是相关的)。 final
关键字还允许一些优化(如果您有代码调用这些方法中的任何一个,它可以使用静态分派而不是动态分派),这种情况下不太可能产生任何可观察到的影响。
从底线开始,您不必在此上下文中使用final
。
“最佳实践”是在您需要的地方使用final
,即类实际上不能或不应该被子类化,或者您真正需要静态调度提供的性能差异。
在回答您的问题时,这是否是一个可以接受insomnia
声明的地方,是的是(但不需要final
)。应用程序运行时AppDelegate
未发布,而且我们通常会将“app lifecycle”相关代码放在此处。