web-dev-qa-db-ja.com

`[superviewDidLoad]`規則

実装前と実装後に[superviewDidLoad]が呼び出されたサンプルコードがいくつかあります。

(他の多くの議論で見られるように)あなたがいつもスーパーと呼ぶ必要はないことを私は知っています。あなたがそれを呼ぶとき、それはあなたがコーディングする前または後に期待されますか?

これは、superの実装が行うことによっては結果をもたらす可能性があります。あなたはあなたを書くためにスーパーの実装を知る必要はないはずですが。

もちろん、これはすべてのUIViewControllersデリゲートメソッド(willAppear、didAppearなど)に当てはまります。

何かご意見は?

60
Corey Floyd

私の経験則は、初期化に関連することをしている場合は、常に最初にスーパークラスのメソッドを呼び出すことです(呼び出す場合)。これにより、スーパークラスは、メソッドの後半で信頼できる設定を行うことができます。破壊に関連することをしている場合は、最後にスーパークラスのメソッドを呼び出します。これにより、メソッドの実行全体を通じてオブジェクトの状態を信頼できるようになります。最後に、ケースバイケースで他のケースを取り上げます。たとえば、イベントを処理している場合、おそらく最初にイベントを処理し、イベントを処理しないことを選択した場合、または何らかの方法でイベントを変更してイベントに渡したい場合にのみ、スーパークラスのメソッドを呼び出します。鎖。

97
Jason Coco

親と子の2つのクラスがあるとします。子は親から継承します。文字列を返すgreetというメソッドがあります。

親メソッドは次のようになります。

コード:

-(NSString *)greet {
 return @"Hello";
}

私たちは子供に両親から学んでもらいたいのです。だから私たちはスーパーを使ってママがどのように挨拶するかを挨拶しますが、私たち自身の小さな追加もあります。

コード://親から継承

-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}

だから今、親は「こんにちは」と挨拶し、子供は「こんにちは、ママ」と挨拶します。後で、親の挨拶を「こんにちは」だけを返すように変更すると、両方のクラスが影響を受け、「こんにちは」と「こんにちは、ママ」になります。

superは、スーパークラスで定義されているメソッドを呼び出すために使用されます。これは、サブクラスによってオーバーライドされたメソッドにアクセスするために使用されます。これにより、クラスは、親クラスが実装するメソッドの周りに独自のコードをラップできます。なんらかの継承を行う場合に非常に便利です。

0
Kishore Suthar