オーバーライドinitialize()
クラスが最初のメッセージを送信する前に(等UserDefaults設定)コードを実行するための一般的であり、複数回実行されるコードに対する保護します。ドキュメントには、スーパークラスの実装が複数回のサブクラスがinitialize()
をオーバーライドし、initialize()
が複数回呼び出された場合、複数回のコードを実行してからクラスを保護するための方法の例を与えていないと呼ばれることができることを述べている:オーバーライドはAppDelegateに初期化 -
サブクラスが
initialize()
を実装していない場合、実行時に継承された実装が呼び出される場合、またはサブクラスが明示的に[super initialize]
を呼び出す場合、スーパークラスの実装は複数回呼び出される可能性があります。あなたが複数回実行されることから、自分自身を保護したい場合は、これらの線に沿って実装を構築することができます+ (void)initialize { if (self == [ClassName self]) { // ... do the initialization ... } }
私はAppDelegateでinitialize()
をオーバーライドし、複数回のコードの実行を避けるためにしようとしています。 self is AppDelegate.Type
が常にtrueに評価されているかどうかをチェックする(そして私にXcodeで警告が表示される)ので、クラスチェックはわかりません。
私たちはスーパークラスではないので、クラスチェックは適用されません(AppDelegate
のスーパークラスはUIResponder
です)?オーバーライドされたinitialize()
メソッドの内容は、super
を呼び出すことなく、またはクラスチェックを実行することなく1回だけ実行されますか?
あなたはそれがAppDelegate' 'のサブクラスのためにtrueを返しませんis' ==='ではなく ''で使用している場合、私は思います。 – dan
@danええと、私は参考文献を比較することは考えていませんでした。これも良い選択肢であり、サブクラスを保護します。それを回答として投稿するべきです。 – JAL
または 'if self == AppDelegate.self'です。しかし、AppDelegateをサブクラス化しない限り、そのチェックは必要ありません。 –