2013-07-30 1 views
2

Est-il possible de générer une méthode Obj-C? - Par exemple:Générer une méthode Obj-C

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

Je parle en particulier sur la génération de la logique, j'ai un code qui peut créer une classe et ajouter une méthode existante, mais je voudrais savoir si je peux générer la logique la méthode elle-même et l'ajouter à une méthode?

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); 
} 

Répondre

3

Si nous cheveux séparation:

Oui, techniquement, vous pouvez.

Mais il ne sera pas facile du tout.

Objective-C peut être analysé par libclang (la bibliothèque C++ qui clang le compilateur est basé sur), puis JIT compilé et exécuté en utilisant LLVM. De cette façon, vous pouvez intégrer clang et LLVM dans votre programme, générer dynamiquement du texte source Objective-C, l'analyser dans un arbre de syntaxe abstraite (ou générer directement AST, sans écrire et analyser aucun Objective-C), et le compiler. Si vous écrivez une méthode qui le fait, vous pouvez essentiellement exécuter du code Objective-C arbitraire depuis votre application.

Questions connexes