2005-02-18

Objective-C の継承を飛び越えてメソッドを呼ぶ方法

post : 2005-02-18 2:05 |

NSTextFieldCell のサブクラスを作ったんだけれど、どうしても NSCell のメソッドを呼びたくなった。そのまま super を呼んでしまうとオーバーライドされていて希望の動作をしてくれない。そこでこう。

#import <objc/objc-runtime.h>

....

id targetClass;

struct objc_super superInfo;
superInfo.receiver = targetClass;
superInfo.class = [NSCell class];

objc_msgSendSuper(&superInfo, @selector(..), ...);


と、することで、クラスを直接指定して自在にメソッドを呼ぶことができた。objc_super.class には objc_super.receiver が継承しているクラスを指定しないとクラッシュするだろう、きっと。継承していてもちゃんと動作するとは限らないので乱用はしない方が良いだろう。

Trackback 現在、受付は中止しています

No Trackbacks

Comment

No Comments