ios之runtime机制2016.6

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交换方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,859评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,087评论 7 64
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,386评论 30 472
  • 我推开扉门 雾气弥漫着 在梦里梦到的 心上人 就在山的对面
    呒筠阅读 838评论 0 0
  • “我追。一个成年人在一群尖叫的孩子中奔跑,但我不在乎。我追。风拂过我的脸庞,我唇上挂着一个像潘杰希尔峡谷那样大...
    花开半夏anle阅读 3,262评论 1 3