gpt4 book ai didi

Objective-C 相当于 Ruby 的 #define_method?

转载 作者:行者123 更新时间:2023-12-04 07:09:50 26 4
gpt4 key购买 nike

是否可以像在 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

为了它的 hell ,我敲了一个非常简单的例子

#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应该是可变参数,而且恰好按照我在 x86 上的方式进行操作是可以的,并且在 ppc 上可能会失败——但是我可能是错的。

here's the awful type encoding docs

关于Objective-C 相当于 Ruby 的 #define_method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com