gpt4 book ai didi

objective-c - 动态添加方法

转载 作者:太空狗 更新时间:2023-10-30 03:50:14 25 4
gpt4 key购买 nike

我正在尝试在 Obj-c runtime reference 中找到的这种方法

BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

我想添加一个新方法,例如:

- [AClass drawWithFrame:(NSRect)rect inView:(id)view]

到目前为止,我已经编写了一个 C 函数:

void drawWithFrameInView(id this, SEL this_cmd, NSRect frame, id view){
...
}

现在我准备好了:

BOOL success = class_addMethod(NSClassFromString(@"AClass"), 
@selector(drawWithFrame:inView:),
(IMP)drawWithFrameInView,
"v@:@:@:");

但是 success 永远不会是 YES,我已经尝试使用具有更简单签名的方法使用相同的方法并且它有效。所以我认为问题是最后一个参数:"v@:@:@:"

在这种情况下我应该传递什么来让我的新方法起作用?

最佳答案

这会起作用:

char *types = [[NSString stringWithFormat:@"v@:%s@", @encode(NSRect)] UTF8String];

BOOL success = class_addMethod(NSClassFromString(@"MyClass"),
@selector(drawWithFrame:inView:),
(IMP)drawWithFrameInView,
types);

你的代码不起作用的原因是因为 NSRect 不是一个对象,它是一个 typedefstruct

了解有关类型编码的更多信息 here .

关于objective-c - 动态添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com