# runtime_lgf **Repository Path**: LGF_IOS_DEV/runtime_lgf ## Basic Information - **Project Name**: runtime_lgf - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-12 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # runtime_lgf 一个关于runtime简单实用的项目,主要介绍runtime的基本原理和简单使用 什么是runtime? Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。 RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。 对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。 OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。 只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。 使用的案例: 1.拦截系统自带的方法调用(Swizzle 黑魔法),也可以说成对系统的方法进行替换,比如viewDidLoad、viewWillAppear 2.实现为分类增加属性; 3.实现NSCoding的自动归档和自动解档; (不用对每个属性edcode和decode了,如果几十个属性一个个的encode和decode真的很麻烦啊,使用运行时可以遍历出每个对象的属性,数组的方式遍历eccode,decode) 4.实现字典和模型的自动转换 (核心就是可以遍历出字典中的每个属性,json解析中大牛框架都用了这个特性,包括MJEXtension,YYModel,jsonModel都是将json转换为字典,再遍历字典中的每个属性来进行modle的转换)。 5.动态增加方法 (动态的为某个类或对象增加一个方法) 6.避免一个button被多次点击 7.扩大button的点击范围 8.为系统的导航栏测滑手势增加全屏的效果