Runtime相关整理

一.Runtime是用C和汇编写的

  • 对于C语言,函数的调用在编译的时候会决定调用哪个函数。对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

二.Runtime常用头文件

  #import<objc/runtime.h>

  #import<objc/message.h>

三.Runtime常用函数

   class_copyIvarList:获得某个类内部的素有成员变量

class_copyMethodList:获得某个类内部的所有方法

class_getInstanceMethod:获得某个具体的实例方法

class_getClassMethod:获得某个具体的类方法

class_getMethodImplementation:获取方法实现

method_exchangeImplementations:交换两个方法的实现

objc_msgSend:给对象发送消息

class_addMethod:添加方法

objc_getAssociatedObject:根据关联的key,获取关联的值

objc_setAssociatedObject:设置关联属性

四.Runtime使用场景

发送消息

交换方法

动态生成属性,方法

通过block回调,直接调用action

归档,解档

字典转模型

五.Runtime各种使用场景的具体实现

1.发送消息

   

注意点:

  

  

2.交换方法

    因为不能直接在分类中重写系统方法,例如imageNamed,这样会把系统功能覆盖掉,分类中不能调用super,所以需要用到交换方法来代替重写。

  

3.动态生成属性,方法

    如果一个类的方法非常多,加载类到内存的时候也比较资源,需要给每个方法生成映射表,动态生成方法则解决了这个问题。

   

  动态添加属性

   

4.通过block回调,直接调用action

   

  //通过block回调,直接调用action

   

   

   

5.归档,解档

  

  

  

6.字典转模型

  KVC:遍历字典中的所有key,去模型中查找有没有对应的属性名

  Runtime:遍历模型中的所有属性名,去字典中查找

  

  

时间: 2024-07-31 16:54:06

Runtime相关整理的相关文章

NSDateFormatter相关整理

//实例化一个NSDateFormatter对象NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];//设定时间格式,这里可以设置成自己需要的格式[dateFormatter setDateFormatter:@"yyyy-MM-dd HH:mm:ss"];NSString *currentDate = [dataFormatter stringFromDate:[NSDate date]];注:这里的 [NSD

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/[email protected]/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方便 时隔一年,也该维护修改一下 修改说明(当然还有很多未完成): 统一使用C语言标准(原有的是C++的一些特性) 代

ORACLE ERP相关整理汇总

摘自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7633f8883492c81c40884642c101a39feed7c63525483846b6777ac4f5aeefb3765377523a09bbfd20c82e5866d72c8713b2d5cd5104c840eafba11658337902bb6e947f0bb802594dac5d2af0b008c044521d3ae9c5b700

git相关整理

title: git相关整理 toc: false date: 2018-09-24 20:42:55 git merge 和 git merge --no--ff有什么区别? git merge命令用于合并指定分支到当前分支.默认情况下,执行快进式合并(fast-farward merge),直接通过把master指向feature来将两个分支并为一个分支,只保存master的分支信息. git merge --no--ff执行正常合并,在master分支上生成新的节点,就可以保存之前的fea

[转] CSSOM视图模式(CSSOM View Module)相关整理

以下就是一些API属性的相关内容,包括兼容性,使用,测试等. 一.Window视图属性 这些属性可以hold住整个浏览器窗体大小.微软则将这些API称为“Screenview 接口”.包括:innerWidth 属性和 innerHeight 属性pageXOffset 属性和 pageYOffset 属性screenX 属性和 screenY 属性outerWidth 属性和 outerHeight 属性 相关属性组对应的兼容性以及使用见下面. 1. innerWidth 属性和innerHe

linux查看硬件信息及驱动设备相关整理

查看声卡设备:cat /proc/asound/cards 查看USB设备:cat /proc/bus/usb/devices 常用命令整理如下:用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)查看CPU信息:cat /proc/cpuinfo查看板卡信息:cat /proc/pci查看PCI信息:lspci (相比cat /proc/pci更直观)查看内存信息:cat /proc/meminfo查看USB设备:cat /proc/bus/u

页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理

鼠标事件都是在特定位置发生的,我们可以通过event事件对象的各种属性来获得事件发生的坐标位置,有相对于视口的,有相对于整个文档的,同样页面元素的位置也有相对视口的,也有滚动后的,这些都比较容易混淆,所以整理在这里,备忘,待查. 1.客户区坐标位置(clientX/clientY) 我们可以通过event事件对象的clientX/clientY属性获得事件发生时鼠标指针在视口中的水平和垂直坐标. 示意图: 2.屏幕坐标位置(screenX/scrennY) 通过event事件对象的screenX

mysql数据库相关整理

数据库相关 1.InnoDB的日志 InnoDB有很多日志,日志中有2个概念需要分清楚,逻辑日志和物理日志. 1.1 逻辑日志有关操作的信息日志成为逻辑日志.比如,插入一条数据,undo逻辑日志的格式大致如下:<Ti,Qj,delete,U> Ti表示事务id,U表示Undo信息,Qj表示某次操作的唯一标示符 undo日志总是这样:1). insert操作,则记录一条delete逻辑日志. 2). delete操作,则记录一条insert逻辑日志.3). update操作,记录相反的updat

前端XSS相关整理

前端安全方面,主要需要关注 XSS(跨站脚本攻击 Cross-site scripting) 和 CSRF(跨站请求伪造 Cross-site request forgery) 当然了,也不是说要忽略其他安全问题:后端范畴.DNS劫持.HTTP劫持.加密解密.钓鱼等 CSRF主要是借用已登录用户之手发起“正常”的请求,防范措施主要就是对需要设置为Post的请求,判断Referer以及token的一致性,本文不展开 相对来说,XSS的内容就非常庞大了,下面就来整理一下一些XSS的知识点.比较匆忙,