是否可以像在 Ruby 中一样在 Objective-C 中动态定义方法?
[:failure, :error, :success].each do |method|
define_method method do
self.state = method
end
end
最佳答案
实际上可以做到这一点,尽管 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 上可能会失败 - 但我可能是错的.
关于Objective-C 相当于 Ruby 的#define_method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555298/