Runtime_消息转发机制

来源:互联网 发布:手机美工软件哪个更好 编辑:程序博客网 时间:2024/05/17 21:48

demo下载地址 http://download.csdn.net/detail/xlsn0w/9429193

#import "Person.h"


#import <objc/objc-runtime.h>

#import "Cat.h"


@implementation Person

/**

 *  ViewController里面调用catchMousePerson没有catchMouse

 

    但发现Cat拥有catchMouse方法可以在外界调用Person类的catchMouse方法转发消息给Cat

 */

{

    Cat *cat;

}


- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {

    

    

    NSMethodSignature *methodSignature = [supermethodSignatureForSelector:aSelector];

    

    if (methodSignature == nil) {

        

        cat = [Catnew];

        

        methodSignature = [cat methodSignatureForSelector:aSelector];

        

    }

    

    return methodSignature;

    

}


- (void)forwardInvocation:(NSInvocation *)anInvocation {

    

    [anInvocation invokeWithTarget:cat];

}


ViewController.m里面实现人的方法具有猫的抓老鼠方法

#import "Person.h"

#import <objc/objc-runtime.h>

#import "Cat.h"



@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    Person *person = [Personnew];

    [person performSelector:@selector(catchMouse)];

}



0 0