003-runtime动态添加方法

2017-02-25  本文已影响41人  紫荆秋雪_文

1、runtime实现动态添加方法

2、实例

//
//  Person.h
//  03-runtime(动态添加方法)
//
//  Created by 紫荆秋雪 on 2017/2/24.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <objc/message.h>
@interface Person : NSObject

@end

//
//  Person.m
//  03-runtime(动态添加方法)
//
//  Created by 紫荆秋雪 on 2017/2/24.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "Person.h"

@implementation Person


void eat(id self, SEL sel) {
    
    NSLog(@"eateat%@", self);
}

//有未实现的 ‘对象方法’的时候就会调用这个方法,在这个方法中进行动态添加方法的处理
+ (BOOL)resolveInstanceMethod:(SEL)sel {
    if (sel == NSSelectorFromString(@"eat")) {
        //class: 给那个类添加方法
        //SEL:添加那个方法
        //IMP:方法实现 函数 函数入口 函数名
        // type: 包含方法的参数
        class_addMethod(self, sel, (IMP)eat, "v@:");
        return YES;
    }
    return [super resolveInstanceMethod:sel];
}
@end

//
//  ViewController.m
//  03-runtime(动态添加方法)
//
//  Created by 紫荆秋雪 on 2017/2/24.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "ViewController.h"

#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *p = [[Person alloc] init];
    //p发送一个对象消息 eat
    [p performSelector:@selector(eat)];
}


@end

上一篇 下一篇

猜你喜欢

热点阅读