什么是runtime?

runtime直译就是执行时间,run(跑,执行) time(时间),网上大家都叫它执行时,它是一套比較底层的纯C语言API,属于一个C语言库,包括了非常多底层的C语言API,它是OC的幕后工作者,我们平时写的OC代码,在执行过程时,都会转为runtime的C语言代码

runtime有什么用?

假设你之前不知道runtime,可能认为它没什么用,事实上他的作用很强大.以下我们就以代码的形式为大家揭开runtime的神奇面纱

作用1  获取一个类所有成员变量名(假设你的成员私有,也能够获取到)

我们新建一个Person类,.h代码例如以下

这些成员变量都是公有的,我们直接点开头文件就能够看到,假设是系统的类呢,你是不是就不知道类里面有哪些成员了,利用runtime能够轻松解决问题,如今我们来測试一下,记得要加 #import

打印结果

你能够试一下,把全部的成员放到.m文件中面,它打印的结果是一样的.

作用2  同理,我们能够获取到一个类的所有属性名

打印结果:

作用3 获取一个类的所有方法

打印结果:

我们能够看到全部的方法

作用4 获取一个类遵循的全部协议

先将遵循的协议给凝视掉

測试代码

结果啥都没有打印出来

我们把遵循的代码凝视给打开

再运行測试代码,打印结果

是不是非常棒,你可能认为貌似用处不太大,那接下来我们来看看怎样利用runtime归档和解档.

作用5 归档/解档測试例如以下:


iOS runtime执行时具体解释的更多相关文章

  1. IOS -执行时 (消息传递 )

    一 函数调用概述      Objective-C不支持多重继承(同Java和Smalltalk),而C++语言支持多重继承. Objective-C是动态绑定,它的类库比C++要easy操作. Ob ...

  2. ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundColor的方法换成了自定义的pb_setBackgroundColor 首先创建UIV ...

  3. iOS runtime 运行时( 二 )

    我们在编程过程中,如果使用到了runtime(运行时),我们几乎都是想动态的改变这个类的信息,包括方法,属性,balabala的,并且获得这个类的一些信息,等等,下面我们就来看看怎么通过runtime ...

  4. iOS runtime 运行时( 三 )

    上一篇 聊的是: 在不知道一个对象有什么属性的情况下, 获取对象的所有属性,然后可以改变属性的值, 今天我们谈谈 怎么通过Category(类别)+runtime 给一个类 添加一个新的属性,一般情况 ...

  5. iOS runtime 运行时( - )

    谈到运行时,相对应的就有编译时: 1).运行时-- 直到程序运行时才去确定一个对象的具体信息,并且可以改变这个类的具体信息,包括它的方法,变量等等: 2).编译时-- 是在程序运行之前,编译的时候,就 ...

  6. IOS - 执行时 (经常使用函数)

    能够通过NSObject的一些方法获取运行时信息或动态运行一些消息: /*Returns a Boolean value that indicates whether the receiving cl ...

  7. C++ - RTTI(RunTime Type Information)执行时类型信息 具体解释

    RTTI(RunTime Type Information)执行时类型信息 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details ...

  8. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  9. iOS开发之runtime运行时机制

    最近参加三次面试都有被问到runtime,因为不太懂runtime我就只能支支吾吾的说点零碎.我真的好几次努力想看一看runtime的知识,因为知道理解它对理解OC代码内部变化有一定帮助,不过真心觉得 ...

随机推荐

  1. Camtasia Studio CamStudio如何导出为手机视频

    把视频拖放到左侧窗口,再按住拖放到下方的时间轴   点击生成并共享,然后设置为自定义生成设置   这里选择MP4,然后下一步   到这一步的时候,选择视频大小为自定义   会弹出窗口,手动输入宽360 ...

  2. Nginx做正向代理并缓存文件

    和前面一篇用Nginx做反向代理并缓存静态文件 差别仅在于这是内部机器用来通过Nginx上外网的方式. 其他配置差不多,仅在下面有点区别 server { listen 83; location / ...

  3. 微信小程序 - debug(调试)

    微信小程序调试的方式是基于Chrome. 1. 常见console.log调试(可以具体参考console.log这个函数使用,它可不止这一个作用!) 2.使用NETWORK(我们可以查询到访问了那些 ...

  4. 在vim中安装及配置NERDTree插件

    使用Vundle插件安装,在.vimrc中加入以下代码: Plugin 'scrooloose/nerdtree' 打开vim,输入命令如下: :BundleInstall 等待安装完毕 配置NERD ...

  5. Tomcat中的session实现

    Tomcat中一个会话对应一个session,其实现类是StandardSession,查看源码,可以找到一个attributes成员属性,即存储session的数据结构,为ConcurrentHas ...

  6. LeetCode] binaryTreePaths

    class Solution { public: void binaryPath(TreeNode* root, vector<string>& result, string pa ...

  7. ANTLR#1:描述一个简单计算器

    https://blog.csdn.net/kisimple/article/details/44948603

  8. Excel之tab键

    如上,当用鼠标框选了一定的单元格范围之后,输入第一个数据再按tab捡继续输入数据.当数据输入到框选范围行的末尾时会实现自动转行,如图所示.

  9. 使用u盘安装os x系统

    从 App Store 下载 OS X 安装器 请执行以下步骤下载要安装的 OS X 版本. 1. 从 Apple 菜单中,选取“App Store”. 2. 按住 Option 键并点按“已购项目” ...

  10. Linux-静态库生成

    Linux上的静态库,其实是目标文件的归档文件.在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生成静态库. 配合静态库,写一个 ...