runtime OC类执行顺序

runtime如何实现?

OC这个语言尽可能的将一些决定从编译器推迟到运行时,他会尽可能的动态处理事情,这意味着这个语言不仅需要一个编译器,还需要一个运行时系统,使得这个语言得以运行。
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

Runloop

一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。runloop就是一种机制,让线程能随时处理事件但并不退出,
一个run loop就是一个事件处理循环,用来不停的监听和处理输入事件并将其分配到对应的目标上进行处理。相对于普通循环,NSRunLoop是一种更加高明的消息处理模式,他对消息处理过程进行了更好的抽象和封装,把消息打包成input source或者是timer source。
其次,也是很重要的一点,使用runloop可以使你的线程在有工作的时候工作,没有工作的时候休眠,这可以大大节省系统资源。

OC类怎么执行?

  1. 当程序启动时,就会加载项目中所有的类,而且加载后会调用每个类的+load方法,只会调用一次;
  2. 当第一次使用某个类时,就会调用当前类的+initialize方法;
  3. 先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法,最后调用分类的+load方法),先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)。
  4. 注意:在初始化的时候,如果在分类中重写了+initialize方法,则会覆盖掉父类的。
  5. 重写+initialize方法可以监听类的使用情况。

首先从硬盘load程序代码到内存。
其次操作系统找到程序入口开始执行。

再次在程序执行过程中进行内存的管理。主要需要四部分内存空间:堆区用来存放创建的对象;栈区用来存放局部变量;数据区用来存放静态变量和字符串常量;代码区用来存放程序代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,890评论 0 9
  • 目录 Objective-C Runtime到底是什么 Objective-C的元素认知 Runtime详解 应用...
    Ryan___阅读 5,932评论 1 3
  • --存在继承关系时initialize和load的调用问题-- 1,如果没有重写,子类会调用父类的+(void)i...
    天蓬大元阅读 2,286评论 0 0
  • iOS开发中总能看到+load和+initialize的身影,网上对于这两个方法有很多解释,官方也有说明,但有些细...
    朱晓辉阅读 27,611评论 19 139
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,784评论 33 466

友情链接更多精彩内容