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

Is it bad practice to declare the AppDelegate class as 'final' in swift?

现在,我正在尝试使用来自 Git 的名为 Insomnia 的 class 来防止设备在充电时锁定。如果您好奇,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 as final so that the insomnia variable isn't deallocated ...

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

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

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


在回答您的问题是否可以在此处声明 insomnia 时,是的(但不需要 final)。当应用 运行 时,AppDelegate 不会发布,我们通常会在此处放置“应用生命周期”相关代码。