DoWorksObjCの継承に関する疑問とselfの暴走とかコメントをどうぞ詳細Objective-C2.0第3版を読み進めてます。詳細を見るその中の継承に関する項目にて。A->B->Cという継承構造でsuperをつかうとCからAのメソッドを呼び出せるよ!みたいな事が書かれてました。文献上の例だとAからCの3つですが、そもそもクラスは全てNSObjectから継承してるはずなので、Superいっぱつで親飛び越して先祖を参照する、っていっきにNSObjectを参照することになるの?どこまで上位を参照しにいくんだ?とか疑問が。結論から言うと、継承を続けている際に、直近のOverrideされたメソッドを使用する、という挙動でした。それ以外にも色々勘違い解消できました。試してみた実際に、以下の様にサンプルを作ってコンソールに経過を吐かせて動作を確認します。*)launchOptions”に以下を追加で。NSLog(@"end");実行するとコンソールには以下の様に。Applicationsここで注目。method1]はどこに届いたか?答え:Bクラスのオブジェクト。superで指定した先は直近のクラスでした。上のクラスのを参照するには?とりあえずBクラスでOverrideしたmethod1をコメントアウトします。1途中から再帰呼び出し状態に。method1];はAクラスのmethod1がselfのmethod2を呼び出している。method3];}つまりCクラスのmethod2を呼び出し、再度Aクラスのmethod1が呼ばれ、という再帰状態に。あれ?selfってthisみたいなものじゃなかったの?とどのつまり継承に関しては直近の先祖の中でOverrideされたものを適用する、という事がわかりました。superはOverrideされたか否かで参照先が変動するということです。自身が犯した勘違いは、selfはthisと同じ様に、自身を参照するのかと思っていた点。実際は、呼び出したオブジェクトのメソッドをコールするのでした。この挙動を実現するにあたって、存在しないメソッドをコールした際に動作が停止しないで無視される言語仕様にした理由がわかりました。文献に対する理解力不足がおもわぬ勘違い解消に発展した変なお話。GoogleAppを使ってリマインダーを作ってみた。コメントをキャンセルメールアドレスが公開されることはありません。