运维开发网

Objective-C,我如何在另一个类中挂接一个方法

运维开发网 https://www.qedev.com 2020-05-10 16:28 出处:网络 作者:运维开发网整理
Objective-C将所有方法保存在一个巨大的哈希表中 – 所以不应该修补这个表并用我自己的修补方法(然后调用原始方法)替换现有方法吗? 我需要一种方法来连接NSWindow KeyUp方法在一个窗口,我不能子类,因为它已经创建. 我需要一些代码或至少一些我可以用来进一步搜索的关键字. 当然有可能.实际上,您甚至不需要查看哈希表 – 这是标准的API. 例如: typedef void (*NS
Objective-C将所有方法保存在一个巨大的哈希表中 – 所以不应该修补这个表并用我自己的修补方法(然后调用原始方法)替换现有方法吗?

我需要一种方法来连接NSWindow KeyUp方法在一个窗口,我不能子类,因为它已经创建.

我需要一些代码或至少一些我可以用来进一步搜索的关键字.

当然有可能.实际上,您甚至不需要查看哈希表 – 这是标准的API.

例如:

typedef void (*NSWindow_keyUp__IMP)(NSWindow* self, SEL _cmd, NSEvent* evt);
static NSWindow_keyUp__IMP original_NSWindow_keyUp_;

void replaced_NSWindow_keyUp_(NSWindow* self, SEL _cmd, NSEvent* evt) {
  NSLog(@"Entering keyUp:. self = %@, event = %@", self, evt);
  original_NSWindow_keyUp_(self, _cmd, evt);
  NSLog(@"Leaving keyUp:. self = %@, event = %@", self, evt);
}

...

Method m = class_getInstanceMethod([NSWindow class], @selector(keyUp:));
original_NSWindow_keyUp_ = method_setImplementation(m, replaced_NSWindow_keyUp_);
0

精彩评论

暂无评论...
验证码 换一张
取 消