在运行时将Objective-C方法添加到类

前端之家收集整理的这篇文章主要介绍了在运行时将Objective-C方法添加到类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在旧系统上支持10.9中新添加的NSColor方法. 10.9之前我在一个类别中有这些允许我统一Mac和iOS之间的代码.现在10.9有这些方法,无论我在哪里使用它,我都会得到奇怪的绘图.我想动态地将这些方法添加到较旧的运行时,并且我已经找到了几个使用class_addMethod来完成它的参考.问题是,即使addMethod返回成功,也不会调用方法.
  1. NSColor *
  2. fColorWithWhite(id self,SEL _cmd,float white,float alpha) {
  3. return [NSColor colorWithDeviceWhite: white
  4. alpha: alpha];
  5. }
  6.  
  7. NSColor *
  8. fColorWithRedGreenBlue(id self,float red,float green,float blue,float alpha) {
  9. return [NSColor colorWithDeviceRed: red
  10. green: green
  11. blue: blue
  12. alpha: alpha];
  13. }
  14.  
  15. + (void)addLegacySupport {
  16. Class class = NSClassFromString(@"NSColor");
  17.  
  18. BOOL success = class_addMethod(class,@selector(colorWithWhite:alpha:),(IMP)fColorWithWhite,"@@:ff");
  19. NSLog(@"colorWithWhite:alpha: - %i",success);
  20.  
  21. success = class_addMethod(class,@selector(colorWithRed:green:blue:alpha:),(IMP)fColorWithRedGreenBlue,"@@:ffff");
  22. NSLog(@"colorWithRed:green:blue:alpha: - %i",success);
  23. }

任何指针都将非常感激.

解决方法

您正在尝试添加方法.您需要将它们添加到元类中.
  1. Class Meta_cls = objc_getMetaClass("NSColor");

猜你在找的C&C++相关文章