objective-c – 动态添加方法

objective-c – 动态添加方法,第1张

概述我正在尝试在 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 我正在尝试在 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@:@:@:");

但成功从来都不是,我已经尝试了相同的方法,使用更简单的签名方法,并且它有效.所以我认为问题是最后一个参数:“v @:@:@:”

在这种情况下我应该通过什么才能使我的新方法有效?

解决方法 这将有效:

char *types = [[Nsstring stringWithFormat:@"v@:%s@",@encode(NSRect)] UTF8String];BOol success = class_addMethod(NSClassFromString(@"MyClass"),types);

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

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

总结

以上是内存溢出为你收集整理的objective-c – 动态添加方法全部内容,希望文章能够帮你解决objective-c – 动态添加方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存