2017-12-07 14 views
1

今、私はGitのInsomniaというクラスを使って、充電中にデバイスがロックされないようにしようとしています。好奇心が強い場合はprojectがここにあります。コード例では、それは私がこれをやっている:あなたが見ることができるようにAppDelegateクラスを迅速に「final」として宣言するのは悪い習慣ですか?

final class AppDelegate: UIResponder, UIApplicationDelegate { 
     private let insomnia = Insomnia(mode: .whenCharging) 
     //app delegate code 
} 

は、それがinsomnia変数の割り当てが解除されないように、あなたが働いてからそれを停止することになる、finalとしてAppDelegateを宣言しています。しかし、わかりませんでした。私のAppDelegatefinalと宣言するのはこの悪い習慣ですか?それとも、これは私のアプリに問題を引き起こすでしょうか?悪い習慣の場合は、insomniaが割り当て解除されていないことを確認する良い方法はありますか?

+0

だから、それを 'final'と宣言する必要はありませんか? – LFHS

+0

awesome、thanks – LFHS

+0

プロジェクトを見ると、 '不眠症'変数の割り当てを解除するのを防ぐために 'final'を使うことは決してないと主張していません。それはあなた自身の結論であるようです、正しい? – rmaddy

答えて

4

あなたは言う:

あなたが見ることができるように、それはinsomnia変数の割り当てが解除されないように、あなたはfinalとしてAppDelegateを宣言してい...

finalが何をするかではないこと。単にクラスをサブクラス化することはできません(アプリデリゲートの場合はこれと関連性がない可能性があります)。 finalキーワードでは、このシナリオで観測可能な効果がない可能性のある、いくつかの最適化も可能です(これらのメソッドのいずれかを呼び出すコードでは、動的ディスパッチの代わりに静的ディスパッチを使用できます)。

ボトムラインの場合、finalをこの文脈で使用する必要はありません。

「ベストプラクティス」は、クラスが本当にサブクラス化できない、またはすべきでない場所、または静的なディスパッチが提供するパフォーマンスの違いが本当に必要な場所で、finalを使用することです。これはinsomniaを宣言するために許容可能な場所であるかどうか、あなたの質問への答えで


、はい、それはです(ただし、何finalは必要ありません)。 AppDelegateは、アプリが実行されている間は公開されておらず、一般的に「アプリライフサイクル」関連のコードを置いています。

関連する問題