美文网首页
Runtime 其他相关

Runtime 其他相关

作者: coder_feng | 来源:发表于2019-07-11 18:32 被阅读0次

Runtime常用场景

Runtime的应用都有哪些常用场景呢?

查看私有成员变量

修改占位符颜色

字典转模型

字典转模型

替换方法实现

替换方法实现

Runtime API -类

api-类

Runtime API-成员变量

成员变量

Runtime API-属性

属性

Runtime API-方法

方法1 方法2

上面的方法不一一举例,就挑一些常用的来说明一下

设置isa指向的Class:

更改isa指向

判断一个OC对象是否是Class

测试OC对象是否为Class

动态添加类,方法和属性

动态添加类

上面的图得到一个什么结论呢?发现成员变量只能在注册类之前添加,注册之后就不能更改了,而方法还是可以的,这个都是Class内部结构所规定的,请看 下图:

Class 结构

ivar 是存放在ro变量,而ro变量是可读的权限,所以ivar只能在注册类之前添加,而方法列表和属性列表,协议列表在rw中,是可读可写的,所以方法在类注册之后依然还是可以添加的

成员变量相关

ivars

交换方法

交换方法

Runtime补充

什么是Runtime?平时项目中有用到么?

OC是一门动态性比较强的变成语言,允许很多操作推迟到程序运行时再进行,OC的动态性就是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动态相关的函数

平时编写的OC代码,底层都是转换成Runtime API去执行

应用场景

利用该关联对象给分类添加属性;

遍历类的所有成员变量(修改textfield的placeholder 颜色,字典转模型,自动归档解档);

交换方法实现;

方法交换

交换方法应用层举例子

交换button发送事件

正常button点击事件

如果现在我需要控制button的点击事件,我们可以通过交换方法去做,我们知道button继承UIControl 这个类,并且这类事件的底层调用方法都是sendAction:to:forEvent:这个方法,因此我们可以通过交换这个方法进行拦截,从而达到目的;创建UIControl分类,在load方法中交换这个方法:

button交换方法

数组插入空元素奔溃

没有交换方法 交换方法后

字典插入nil奔溃

没有交换方法 交换方法

相关文章

  • Runtime 其他相关

    Runtime常用场景 Runtime的应用都有哪些常用场景呢? 查看私有成员变量 字典转模型 替换方法实现 Ru...

  • iOS之RunTime探索与实践

    Runtime 概念 Runtime 相关概念 Runtime 实践 Runtime概念 Runtime简称运行时...

  • IOS面试考察(一):runtime相关问题

    @[TOC] 1. IOS面试考察(一):runtime相关问题 1.1 runtime相关问题 runtime是...

  • runtime02-常用API

    runtime常用API runtime API01-类相关 runtime API01-类相关-事例01 run...

  • runTime其他

    runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时。也就是说只有...

  • Runtime学习笔记记录

    文章目录 一 runtime原理 二 Runtime相关的头文件2-1 iOS 中 Runtime相关的头...

  • iOS - Runtime - 概念和方法交换

    runtime的概述runtime的相关概念runtime消息机制消息传递动态方法解析消息转发runtime的作用...

  • Runtime相关

    cache_t ·用于快速查找方法执行函数 ·是可增量扩展的哈希表结构 ·是局部性原理的最佳应用

  • Runtime相关

    1. 当接手一个比较大的项目时,利用method Swizzle (方法交换),来快速熟悉项目,从控制台输出当前控...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

网友评论

      本文标题:Runtime 其他相关

      本文链接:https://www.haomeiwen.com/subject/kolrkctx.html