在 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
不会发布,我们通常会在此处放置“应用生命周期”相关代码。
现在,我正在尝试使用来自 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
asfinal
so that theinsomnia
variable isn't deallocated ...
那不是 final
所做的。它只是说 class 不能被 subclassed(这在应用程序委托的情况下不太可能相关)。 final
关键字还允许一些优化(如果您有代码调用这些方法中的任何一个,它可以使用静态分派而不是动态分派),在这种情况下不太可能产生任何可观察到的效果。
最重要的是,您不必在此上下文中使用 final
。
“最佳实践”是在您需要的地方使用 final
,即 class 确实不能或不应该被子class 的地方或您真正需要的地方静态调度提供的性能差异。
在回答您的问题是否可以在此处声明 insomnia
时,是的(但不需要 final
)。当应用 运行 时,AppDelegate
不会发布,我们通常会在此处放置“应用生命周期”相关代码。