Adapting Modern Objective-C ドキュメントから:
クラスが 1 つ以上の指定された初期化子を提供する場合、そのスーパークラスのすべての指定された初期化子を実装する必要があります。
つまりNSObject
、独自の指定された初期化子を持つサブクラスがある場合、たとえば
- (instancetype)initWithImage:(UIImage*)image NS_DESIGNATED_INITALIZER;
次に、 NSObjects の実装も提供する必要があります-init
。-init
イニシャライザを「無効」とマークするにはどうすればよい-initWithImage:
ですか? ここでのベストプラクティスは何ですか?
編集
ここで説明されている手法を試しました。
-init
ただし、インターフェイスでスーパークラスメソッドをマークするunavailable
と、コンパイラはスーパークラスの初期化子を上書きする必要があることを通知します。
他の手法、つまり、例外を発生させたり、-doesNotRecognizeSelector:
内部で呼び出したりしようと-init
すると、指定された初期化子の 1 つを呼び出す必要があることを示すエラーが表示されます。