首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objc Runtime 总结

概述 Objc Runtime使得C具有了面向对象能力,在程序运行时创建,检查,修改类、对象和它们的方法。...Runtime是C和汇编编写的,这里http://www.opensource.apple.com/source/objc4/可以下到苹果维护的开源代码,GNU也有一个开源的runtime版本,他们都努力的保持一致...苹果官方的Runtime编程指南 Runtime函数 Runtime系统是由一系列的函数和数据结构组成的公共接口动态共享库,在/usr/include/objc目录下可以看到头文件,可以用其中一些函数通过...Class和Object基础数据结构 Class objc/runtime.h中objc_class结构体的定义如下: struct objc_class { Class isa OBJC_ISA_AVAILABILITY...,函数_objc_init就是runtime的加载入口由libSystem调用,开始初始化,之后objc-runtime-new.mm里的map_images会加载map到内存,_read_images

75620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    objc4-750编译

    最新版本的Runtime源码已经出来了,是不急不可耐的想用用它呢?...Runtime源码地址 苹果开源网站:https://opensource.apple.com/上可以下载到很多开源项目,可以看到当前最新mac OS系统为10.14.1,最新的Xcode版本为10,安装...Xcode 10.0提示mac OS系统需要10.13.6: image 通常所说的Runtime源码就是objc4文件,由于iOS中开源项目非常少,所以选择最新mac OS系统10.14.1...image Runtime源码编译 下载好源码之后用Xcode打开是这个样子: image 这里的libobjc.A.dylib就是我们要编译的目标-Runtime库,编译好之后自己可以再添加一个...Target用于测试里面的Runtime源码,但是现在编译会报错,大部分错误是缺少头文件,这些头文件都在苹果开源的其它项目里。

    43120

    objc_msgSend底层探索(上)

    我这篇文章呢,主要来分析一下objc_msgSend,关于他的一个执行流程和快速查找的过程,那首先我需要了解一下Runtime是怎么调起底层的呢?也就是Runtime是怎么发起的呢?...Runtime的发起方式一共有三种。 第一种就是直接从OC层面,调用相关的方法,第二种就是通过NSObject,调用相关的接口,第三种,就是底层提供的objc这类的下层的api,什么意思呢。...在整个的OC层面我们来看一下,第一点,我们写代码都是在OC的Code这一层,就是下图的第一层,那么很多的相关的Framework、Service,是在第二层,Runtime Api也在这一层,比如说objc_getClass...Runtime的相关的一些接口,这就是runtime发起的三种形式。...所以我通过这种objc_msgSend的方式,也是一样能够实现OC的方法调用的。这里Runtime的三种方式就用了两种,还一种方式是什么呢?

    19510

    objc_msgSend 实现分析

    1. runtime运行时 由于缓存的读取和写入涉及到了 runtime 的知识,在这里做简单的介绍。 1.1 runtime概念 编译时: 顾名思义就是正在编译的时候 , 那么什么叫做编译呢?...1.2 runtime 版本 Runtime 有两个版本:Legacy 版本(早期版本,对应 Objective-C 1.0) 和 Modern 版本(现行版本 Objective-C 2.0)。...⚠️ runtime就是c/c++/汇编写的一套API runtime官方文档[2] 对于苹果的一些文档资料都可以在这里搜索:苹果官方文档网址[3],不过苹果现在不怎么维护文档了。...1.3.3 Runtime Functions runtime 是一个提供了一套公共接口(函数和数据结构)的动态分享库,头文件在 /usr/include/objc。...许多 Objective-C 代码可以通过 runtime 的 api 替换为 C 实现。文档: Objective-C Runtime Reference[4]。

    90230

    关于runtime

    一.概述 Runtime是一套C语言的API,基本是用 C 和汇编写的,封装了很多动态性相关的函数,在这里下到苹果维护的开源代码。主要是使用官方Api,解决我们框架性的需求。...我们平时编写的OC代码,底层都是转换成了Runtime API进行调用。...二.消息传递 Runtime的特性主要是消息(方法)传递,如果消息(方法)在对象中找不到,就进行消息转发。...当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),runtime会根据消息接收者是否能响应消息而做出不同的反应。...runtime的执行流程: 首先,通过object的isa指针找到它的 class ; 在 class 的 method list 找 doSomething ; 如果 class 中没到 doSomething

    58410

    Objc 对象的今生今世

    当然在runtime的meta-class有一处很特殊,那就是NSObject的meta-class,它的superclass是它自己本身。...关于对象,所有的对象在内存里面都有一个isa,isa就是一个小“雷达”,有了它,就可以在runtime下给一个对象发送消息了。...类对象是在main函数执行之前就加载进内存的,可执行文件中和动态库所有的符号(Class,Protocol,Selector,IMP,…)都已经按格式成功加载到内存中,被 runtime 所管理,再这之后...,runtime 的那些方法(动态添加 Class、swizzle 等等才能生效) 具体可以看这篇文章iOS 程序 main 函数之前发生了什么 还是回到例子中来,关于对象的属性,就是obj的地址加上偏移量...总结一下就是上面这张图,每个对象的isa都存的是Class的内存地址,Class是在main函数执行之前就加载进内存的,并且由Runtime所管理。

    73010

    objc_msgSend底层探索(下)

    上一篇里面,我从OC层面来探索了objc_msgSend如何进行消息的发送,对普通开发者来说也是比较容易理解的,那很多人都知道,Runtime是由C或者C++以及汇编语言写的一套底层的API。...然后我打开objc源码,全局搜索objc_msgSend。 竟然有644个!看哪一个呢?我之前已经剧透了,objc_msgSend是用汇编写的,所以我来找汇编文件就可以了,按住command。...这里先插一个问题,为什么objc_msgSend是用汇编写的?而不是用C/C++写呢?我刚刚随便一搜索就搜到了很多的objc_msgSend。...也就是说,源码里面包含了多个版本的objc_msgSend方法,他们是根据返回值的类型和调用者的类型分别处理的,如果说用C或者C++来实现。...并且,这种可变的参数,用汇编来处理是最简单最方便的,效率还贼高,所以你更详细的去了解就会发现,在Runtime里面调用频率比较高的函数,很多都是用汇编写的,还有一点,就是更安全,汇编用寄存器进行存储,贼稳

    21820
    领券