よろしければ、私は自分自身にObjective-Cを有罪の喜びとして教えています。私はJava言語を強く理解していると自称しているので、それほど難しい移行ではありませんが、確かに楽しいです。しかし、悲しいかな、私の質問です!
PHPに存在するものを再現しようとしています:LateStaticBinding。PHPでは、メソッド呼び出しを「static ::」で修飾できます。これにより、実行時にそのメソッドが呼び出し元に動的にバインドされます。一方、キーワード「self ::」が使用されている場合、バインディングは静的であり、どの子クラスが呼び出すかに関係なく、それが存在するクラスに関連付けられます。
Obj-Cでは、このパラダイムを再現するのに苦労しています。私は私の大君主であるグーグルに、ココアで静的にバインドするのを遅らせる方法を尋ねましたが、それは可能ではないと思います。それは別の名前で呼ばれることもあれば、非常に頭の痛い回避策が必要になることもあります。これが私が今していることです:
親クラスメソッド:
-(id) whoAmI {
return ([self class]);
}
子クラスChildClassは、ParentClassを拡張し、インスタンスメソッドwhoAmIをオーバーライドしません。
NSLog(@"Calling from PARENT: %@", [parent whoAmI]);
NSLog(@"Calling from CHILD: %@", [child whoAmI]);
各クラスオブジェクトにメッセージを送信すると、動的バインディングは本来の動作を実行し、NSLog()から次のようになります。
2010-09-21 11:39:07.484 WhoAmI [4803:a0f]親からの呼び出し:親
2010-09-21 11:39:07.486 WhoAmI [4803:a0f]子供からの呼び出し:子
最終的には、可能であれば、Cocoaに動的なバインドを停止させて、whoAmIメソッドが常にそれが存在するオブジェクト(常にParent)を返すようにする方法を学びたいと思います。また、インスタンスメソッドにしたいです。どうすればこれを行うことができますか?
-ショーン