На самом деле это можно сделать, хотя это не поддерживается синтаксисом obj-c, среда выполнения obj-c предоставляет функции, которые могут это делать. То, что вы хотите, это class_addMethod
, но изо всех сил я не могу вспомнить точные особенности того, как. Все методы выполнения документированы на developer.apple.com
Черт возьми, я набил очень простой пример
#import <objc/objc-class.h>
@interface MyClass : NSObject {
}
@end
@implementation MyClass
@end
id myMethod(id self, SEL cmd, NSString* message)
{
NSLog(message);
return nil;
}
int main(int argc, char *argv[])
{
class_addMethod([MyClass class], @selector(newMethod:), (IMP)myMethod, "v@:#");
[[[MyClass alloc] init] newMethod:@"Hello World"];
return 0;
}
Теперь, строго говоря, я думаю, что myMethod
должно быть varargs, и это просто нормально делать это, как я на x86, и может потерпеть неудачу на PPC - но тогда я могу ошибаться.
О Вот ужасные документы по кодированию типов