iOS 开发 Runtime到底是什么?
来源:互联网 发布:java面试宝典2015版 编辑:程序博客网 时间:2024/06/10 07:17
Runtime到底是什么?
这个问题一直以来都困扰着大家的,做iOS开发,天天和Object-c打交道,却对runtime到底是什么感觉到很费解?
那么我们就先了解熟悉的东西:Object-C
做iOS开发做的最基本的操作:类,对象,属性,方法,—无论你做什么功能都离开这四个最基本的东东,包括网络请求,代理协议,通知,block,多线程,KVC/KVO,内存管理等等.都是用哪个类创建哪个对象,修改类的属性,对象的属性值,用类或者对象调用哪个方法实现哪些功能和需求.难道不是这样吗?
Objective-C是基于C语言加入了面向对象特性和动态运行时的功能,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发。
因此我们就抓住了Runtime的核心:
- 类,
- 对象,
- 属性,
- 方法.
那么就让我们来认识认识苹果官方开源的Runtime,
官方开源的Runtime
markgc特别显眼, 已经被ARC代替了, 基本只有占坑作用. 其中核心内容在runtime/下, 上面是核心runtime列表, 通过文件名可以看出objc-runtime到底提供了哪些内容, objc_object(id), class, protocol, method, selector, weak, sync, selector-table, RC, load, exception, cache(用于class的selector快速访问), message, 以及几个LLVM提供的基础map, 还有objc中Root Class NSObject的实现(其实就是和runtime做对接, 把自己连入runtime, 这样继承的子类就自动接入runtime了), 以及没有单独实现的autoreleasepool(在NSObject中实现)
其中Messengers就是objc runtime中消息转发的核心了, 纯汇编写成
打开objc.xcodeproj工程文件
objc.xcodeproj
objc的runtime明确的实体就是一个叫做libobjc.dylib的一个编译产物
runtime.h
苹果一贯的习惯,最重要的东西都写在最前面.
因此我们就寻找到了理解runtime的突破点:类,对象,属性,方法—-
都是满满的结构体啊,满满的结构体啊,满满的结构体啊,重要的事情说三遍
Runtime(运行时机制)理解
runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
平时编写的OC代码, 在程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
Objective-C需要Runtime系统来动态创建类和对象,进行消息发送和转发。
runtime的作用
runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。
1.在程序运行过程中, 动态创建一个类(比如KVO的底层实现)
2.在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法
3.遍历一个类的所有成员变量(属性)\所有方法
点开这里看看Runtime的开发中的使用 iOS 开发 Runtime 运行时机制 完全解读
未完待续
后面的文章将会陆陆续续介绍Runtime中对于类,对象,消息机制的深入研究,KVC/KVO属性操作的底层原理
- iOS 开发 Runtime到底是什么?
- 开发到底是什么?
- 开发到底是什么?
- IOS高级开发~Runtime
- IOS开发中的Runtime
- iOS开发-浅解runtime
- iOS开发 runloop&runtime
- 【iOS开发】runtime机制
- 【iOS开发】初识runtime
- iOS开发-初识runtime
- iOS开发:Runtime详解
- iOS开发-Runtime详解
- iOS开发-Runtime详解
- iOS开发-Runtime详解
- 【iOS开发】Runtime详解
- IOS的伪后台模式到底是什么?
- iOS中的SEl和IMP到底是什么
- iOS中的SEl和IMP到底是什么
- 观察者模式(Observer)
- 【Android】学习ListView遇到的问题
- Android init.rc文件解析过程详解(一)
- 关于获取iOS设备唯一标识
- webpack构建vue项目(再谈配置)
- iOS 开发 Runtime到底是什么?
- 记录学习Laravel遇到的坑
- 个人学习安卓基础的小逻辑-勾选和滑动控件
- 软件光栅器六之透视纹理映射
- Android Canvas drawArc方法介绍
- 职责链模式
- 搜索专题(BFS)HDU 1253-胜利大逃亡
- 【Linux】管道的通信总结
- Java模拟post请求