2012-04-02 15 views
8

通常、私はUIクラスからサブクラス化するときに、対象のスーパークラス初期化子を呼び出します。しかし、私はNSObjectの実装の詳細についてはわかりません。メンバーバールに関してはそれほど進んでいないようですので、サブクラスがNSObjectの場合は[super init]に電話する必要がありますか?NSObjectの[super init]や[super initWithCoder]などを呼び出す必要があります

答えて

8

技術的に、 documentation for -[NSObject init]NSObjectクラスで定義されて

initメソッドが初期化を行わないことを言います。単にselfを返します。

それは文書化し、それに依存しているコードの束は、おそらくすでにありますされているので、その事実は、Mac OS Xの将来のバージョン

編集中に変更することが非常にはほとんどありません:BoltClock's a Unicornがもたらしますあなたのプログラムを実行している人のために-[NSObject init]を呼び出さないことで節約された合計時間は、あなたのクラスのスーパークラスを何かに変更した場合に発生するデバッグ時間を超過することはまずありません。 NSObject以外の場合はに電話をかけてください。 documentationから

4

、まったくの初期化を行うには表示されません。

NSObjectクラスで定義されたinitメソッドは、初期化しません。単にselfを返します。

私は[super init]を呼び出すことがない無害だろうと仮定しますが、規則に従うと、あなたが知っている、とにかくあなたのサブクラスでそれを呼び出すしない理由はありません。例えば、あなたのサブクラスは将来別のクラスから継承することになります。サブクラスはそれ自身のサブクラスが必要とする初期化ロジックを独自の-initメソッドに含めることができます。

0

あなたの実装では、superの指定されたイニシャライザのいずれかを呼び出して、明確で正しいものを実行するだけでよいからです。

関連する問題