IOS知识积累

iOS Runtime 和 RunLoop

2021-01-22  本文已影响0人  宥落

文章侧重写Runtime,因为Runtime偏应用多一些,在实际使用中用到的场景较多,开发中可以帮我我们解决大量的问题。RunLoop仅供了解,个人使用也不多。

之前总有一种疑惑,为什么去面试的时候,面试官总是问runloop和runtime?(之前对他们的使用不多)。后来用到的地方多了(主要指runtime的使用),也面试了很多来应聘的,个人觉得runloop你可以只处于理论阶段,但对于runtime你不应该还处于理论阶段,它真的能做很多的事情,即使自己不开发,也应该多学习一些好的代码库,多看一些别人写的。最后,面试官问你runtime,真不是故意为难你!!!

一、RunLoop

1.1 简介

运行循环的意思,具体查看RunLoop官方文档,主要作用就是保证线程不退出能随时处理事件,实现了线程有工作时忙,没工作时线程进入睡眠,避免资源浪费的目的。

1.2 何时使用

按官方文档介绍,在以下情况就需要启动RunLoop:

后三种情况在开发中多少都会遇到、使用过,第一种情况的具体使用可以查看官方文档。

个人了解也不是很多,只是突然间想了解一下,项目中使用最多的地方还是计时器,也只有这一种情况,如:

- (NSTimer *)timer{
    if(!_timer){
        _timer =[NSTimer timerWithTimeInterval:1 target:self selector:@selector(notityCurrentTimer) userInfo:nil repeats:YES];
        [_timer setFireDate:[NSDate distantFuture]];
        [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
    }
    return _timer;
}

除此还需要了解下线程和runloop的关系(每个线程都有一个runloop,主线程的runloop默认开启,子线程runloop需要手动开启关闭),关于RunLoop的更多介绍可查看RunLoop详解

二、Runtime

2.1 简介

简称运行时,就是系统在运行的时候的一些机制,最主要的是消息机制。意味着它可以动态创建类和对象进行消息发送和转发等操作。

这里提到消息机制(和消息推送机制要区分开),建议在了解和使用Runtime之前,先了解一下iOS的消息机制,这样有助于学习和了解Runtime。简单地提一下,有兴趣的可以多看看别的资料,这里对一些关键方法名大致过一眼,比如objc_msgSendobjc_msgSend_stretobjc_msgSendSuperobjc_msgSendSuper_stret

2.2 何时使用

实际应用中主要有以下情况:

可能你觉得自己项目中,使用到的场景很少,但你的项目内肯定包含一些利用Runtime实现的第三方库,如MJExtension,当然类似的库还有很多。

这里推荐几个个人经常使用的、利用Runtime实现的,解决我们遇到的一些问题的库,前两个个人觉得是真滴方便!

三、最后

如果你还有类似利用Runtime实现的好的第三方库,也可以在评论区给小弟我推荐一下,小弟我做下更新!

上一篇 下一篇

猜你喜欢

热点阅读