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 – 动态添加方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)