IOS开发谈谈对Runtime 和 Runloop的理解

Runtime

Runtime简称运行时,OC就是运行时机制,也就是在运行时候的一些机制,其中最重要的事消息机制。

作用

消息机制原理:对象根据方法编号SEL去映射表查找对应的方法实现

方法调用的本质就是让对象发送消息

objc_msgSend,只用对象才能发送消息,因此以objc开头。

使用消息机制前提,必须导入 #import <objc/message.h>

使用场景

交换方法

动态添加方法

给分类添加属性

字典转模型:Runtime

RunLoop

给我们的感觉就像应用一直处于随时待命的状态,在没人操作的时候它一直在休息,在让它干活的时候,它就能立刻响应

Runloo的作用

保持程序的持续运行,保持线程的持续运行,并接受用户输入。

理app中的各种事件(AutoreleasePool、事件响应、手势识别、界面更新、定时器、PerformSelecter、关于GCD、关于网络请求)

调用解耦(Message Queue)

节省CPU资源,提高程序性能:该做事时做事,该休息时休息

RunLoop与线程

每个线程(包括主线程)都有一个对应的RunLoop对象

我们并不能自己创建Runloop对象,但是可以获取到系统提供的RunLoop对象

主线程的RunLoop默认是启动的,用于接收各种输入sources;其他线程的RunLoop默认是没有启动的,如果你需要更多的线程交互则可以手动配置和启动

RunLoop在第一次获取时由系统自动创建,在线程结束时销毁

Runloop运行模式

一个Runloop包含若干个Mode,每个Mode又包含若干个Source/Timer/Observer

每次RunLoop启动时,只能制定其中一个Mode,这个Mode被称作CurrentMode

如果需要切换Mode,只能退出Loop,再从新指定一个Mode进入系统默认模式

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

推荐阅读更多精彩内容

  • Runloop 做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用A...
    GitHubPorter阅读 11,245评论 7 17
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    SOI阅读 21,962评论 3 63
  • 最近面试总被问道这两方面的问题,以前了解的还是比较片面,把自己理解的做一下总结; 我所记录的不是大神那种把源码一条...
    雷3雷阅读 4,123评论 0 1
  • 最近面试总被问道这两方面的问题,以前了解的还是比较片面,把自己理解的做一下总结; 我所记录的不是大神那种把源码一条...
    雷3雷阅读 6,872评论 0 3
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 11,020评论 0 5