3

指定イニシャライザと便利なイニシャライザについてかなり読んだことがありますobjective-cが、それらがどのように、そしてなぜ使用されるのかをよく理解していると感じています。未解決の質問がいくつかありますが、それは本当に 1 つです。

から直接継承するクラスがあり、そのNSObjectための指定された初期化子を作成するとします。

NS_DESIGNATED_INITIALIZERを使用して指定イニシャライザをマークできるようになりましたが、同じクラス内で、指定イニシャライザの呼び出しで最初に init をオーバーライドする必要があることを意味するのでしょうか?

次に、このマクロを使用しない場合、指定された初期化子の呼び出しで init を明示的にオーバーライドしないと、どのような影響があるでしょうか? コンパイラはどれが指定された初期化子であるかを認識しないので、これから何か悪いことが起こる可能性があります.クラスの新しい指定された初期化子を作成するときに init もオーバーライドすることをお勧めしますか?

編集:この質問についてさらに説明を加えたいと思います。優れたコーダーが、独自に作成した指定イニシャライザを追加したにもかかわらず、init をオーバーライドするための個別のメソッドを追加していない例を見てきました。init をオーバーライドする必要があるかどうかを尋ねるときは、もちろんそのスーパークラスの init メソッドを呼び出す必要がある独自の指定された初期化子を作成することに加えて、ということです。優れたコーダーがこれを行わないのを見たので、なぜそれを行うのか疑問に思いました.

4

1 に答える 1