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

标签 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 不被释放?

最佳答案

你说:

As you can see, it has you declare the AppDelegate as final so that the insomnia 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/

相关文章:

ios - 从应用委托(delegate)获取当前 View Controller

ios - iOS:使用AES-128加密播放离线HLS

ios - 以编程方式触发按钮单击事件?

ios - renderMapImageInBoundingBox 在 iOS 上不执行任何操作

swift - 将附件添加到主页总是返回错误(GenericError)

ios - URLSessionDownloadDelegate didFinishDownloadingTo 未在后台调用

ios - 从 AppDelegate 内部执行 pushViewController

ios - AUParameterTree dealloc导致死锁

ios - Swift Static TableView 添加额外的行

ios - 如何从 UILabel 转到应用内浏览器并显示特定链接