5

Adapting Modern Objective-C ドキュメントから:

クラスが 1 つ以上の指定された初期化子を提供する場合、そのスーパークラスのすべての指定された初期化子を実装する必要があります。

つまりNSObject、独自の指定された初期化子を持つサブクラスがある場合、たとえば

- (instancetype)initWithImage:(UIImage*)image NS_DESIGNATED_INITALIZER;

次に、 NSObjects の実装も提供する必要があります-init-initイニシャライザを「無効」とマークするにはどうすればよい-initWithImage:ですか? ここでのベストプラクティスは何ですか?

編集

ここで説明されている手法を試しました。

-initただし、インターフェイスでスーパークラスメソッドをマークするunavailableと、コンパイラはスーパークラスの初期化子を上書きする必要があることを通知します。

他の手法、つまり、例外を発生させたり、-doesNotRecognizeSelector:内部で呼び出したりしようと-initすると、指定された初期化子の 1 つを呼び出す必要があることを示すエラーが表示されます。

4

0 に答える 0