美文网首页
ios之runtime机制2016.6

ios之runtime机制2016.6

作者: cj2527 | 来源:发表于2016-06-30 23:49 被阅读31次

    1.为什么要学runtime?

    最首要的原因是很多招聘要求提到这个,你不能不会吧。其次你写代码的时候有时候用到会很方便。

    2.runtime机制是什么?

    runtime,英文翻译,运行时,它像操作系统一样,用来执行我们编写的代码。
    它是基于C和汇编语言写的,

    3.怎么学runtime?

    直接点它能干嘛?
    简单来说它可以获得某个类的所有成员变量、属性、方法,并且能够动态添加。
    可以动态交换方法、归档和解档、字典转模型等。
    具体作用:发送消息、交换方法、动态添加方法、给分类加属性、字典转模型、
    快速归档等

    3.1发送消息

    Dog.h文件

    #import <Foundation/Foundation.h>
    @interface Dog : NSObject
    - (void)run;
    + (void)eat;
    @end
    

    Dog.m实现

    #import "Dog.h"
    
    @implementation Dog
    - (void)run
    {
        NSLog(@"一只狗正在奔跑。。。。");
    }
    + (void)eat
    {
        NSLog(@"一只狗正在吃。。。。");
    }
    @end
    

    ViewController.m实现,调用两个方法

    #import "ViewController.h"
    #import "Dog.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [Dog eat];
        
        Dog *d = [[Dog alloc]init];
        [d run];
        
    }
    
    @end
    

    现在引入runtime机制
    引入头文件,修改配置,不然会报错


    11809FA9-0A91-415D-98AE-046A5375D0BC.png

    ViewController.m引入runtime机制,发送消息,来执行方法

    #import "ViewController.h"
    #import "Dog.h"
    #import <objc/message.h>
     
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        objc_msgSend([Dog class], @selector(eat));
        
        Dog *d = [[Dog alloc]init];
        objc_msgSend(d, @selector(run));
        
    }
    @end
    

    3.2交换方法

    相关文章

      网友评论

          本文标题:ios之runtime机制2016.6

          本文链接:https://www.haomeiwen.com/subject/yvjfjttx.html