生成Obj-C方法

时间:2013-07-30 12:58:11

标签: objective-c code-generation

是否可以生成Obj-C方法? - 例如:

- (void)doSomething:(BOOL)isLater
{
    if (isLater == FALSE)
    {
        NSLog(@"Not Later");
    } else {
        NSLog(@"Is Later");
    }
}

我特别谈论生成逻辑,我有一些代码可以创建一个类并添加一个现有的方法,但我想知道如果我可以为方法本身生成逻辑并将其添加到方法

static NSString *Description(id self, SEL _cmd)
{
    return @"My Description Method";
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    Class mySubclass = objc_allocateClassPair([NSObject class], "MySubclass", 0);

    // grab NSObject's description signature so we can borrow it
    Method description = class_getInstanceMethod([NSObject class],
                                             @selector(description));
    const char *types = method_getTypeEncoding(description);

    // now add
    class_addMethod(mySubclass, @selector(description), (IMP)Description, types);

    objc_registerClassPair(mySubclass);

    id myInstance = [[mySubclass alloc] init];
    NSLog(@"%@", myInstance);
}

1 个答案:

答案 0 :(得分:3)

如果我们分裂头发:

是的,从技术上讲,你可以。

但这根本不容易。

Objective-C可以由libclangclang编译器所基于的C ++库)解析,然后使用LLVM进行JIT编译和运行。

这样,您可以将clang和LLVM嵌入到程序中,动态生成一些Objective-C源文本,将其解析为抽象语法树(或直接生成该AST,无需编写和解析任何Objective-C),以及编译它。如果你编写一个执行此操作的方法,那么基本上可以从应用程序中动态运行任意Objective-C代码。