现在,我正在尝试使用 Git 中名为 Insomnia 的类来防止设备在充电时锁定。 project如果你好奇的话,就在这里。对于示例代码,它让我这样做:
final class AppDelegate: UIResponder, UIApplicationDelegate {
private let insomnia = Insomnia(mode: .whenCharging)
//app delegate code
}
如您所见,它让您将 AppDelegate
声明为 final
,这样 insomnia
变量就不会被释放,这将停止它从工作。但是,我不确定,将我的 AppDelegate
声明为 final
是否是一种不好的做法?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,是否有更好的方法来确保 insomnia
不被释放?
最佳答案
你说:
As you can see, it has you declare the
AppDelegate
asfinal
so that theinsomnia
variable isn't deallocated ...
这不是 final
所做的。它只是说该类不能被子类化(这在应用程序委托(delegate)的情况下不太可能相关)。 final
关键字还允许进行一些优化(如果您有代码调用这些方法中的任何一个,它可以使用静态分派(dispatch)而不是动态分派(dispatch)),在这种情况下不太可能产生任何可观察到的效果。
最重要的是,您不必在此上下文中使用 final
。
“最佳实践”是在您需要的地方使用 final
,即类确实不能或不应该被子类化的地方,或者您真正需要静态分派(dispatch)提供的性能差异的地方。
在回答您的问题是否是声明insomnia
的可接受位置时,是的(但不需要final
)。 AppDelegate
在应用运行时不会被释放,我们通常会在此处放置“应用生命周期”相关代码。
关于ios - 在 swift 中将 AppDelegate 类声明为 'final' 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701222/