2012-09-14 1 views
5

self = [super init];をカスタム初期化メソッドに書くのは意味がありますか?NSObjectをサブクラス化していますか?カスタム初期化を持つ可能性があるので、他のクラスをサブクラス化する必要があることはわかっていますが、NSObjectのinitメソッドは何もしませんか?NSObjectのinitメソッドは何もしますか?

+4

これは良い習慣です。 – Kyle

答えて

9

オブジェクトは、初期化されるまで使用する準備ができていません。 NSObjectクラスで定義されたinitメソッドは初期化を行いません。それは単に自己を返します。

したがって、NSObjectサブクラスでは、必ずしも[super init]を呼び出す必要はありませんが、それでもお勧めします。それは単に優れたデザインです。スーパークラスを変更しても、それは動作します。

出典:NSObject Class Reference

+5

+1 "私はまだそれをお勧めします" - NSObjectの実装が変更されたり、クラスのスーパークラスを変更したりする可能性があります。スーパークラスの動作について推論するのはクラスの仕事ではありません。 – Tim

+0

ありがとうございます。 :) –

+4

あなたが 'self = [super init ...];'を実行していなければ、あなたのコードは**間違っています**。 NSObjectの実装が何をするかは問題ではありません。完全に脆弱性を最小限に抑えるために、そして文書化された正しいパターンに従って、より保守的なアプリにつながるので、どこでも一貫してパターンを使用してください。 – bbum

関連する問題