美文网首页
<objc/runtime.h>机制下的常用函数

<objc/runtime.h>机制下的常用函数

作者: 骑着毛驴走起来 | 来源:发表于2018-04-12 10:00 被阅读6次

runtime:运行时,是一个c语言库。将我们编写的代码动态的转换成这个库中的函数,结构体,消息等,实现其他语言运行在object-C上。介绍几个函数。

1.objc_setAssociatedObject(id object,const void *key,id value,objc_AssociationPolicy policy)

id object:表示关联者。

const void *key:获取被关联者的key

id value:被关联者,对象。

policy:关联策略,有assign,retain,copy.一般使用”“OBJC_ASSOCIATION_RETAIN_NONATOMIC”

2."objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)",与上面函数一般成对出现

id object

:关联者对象。

key:被关联对象索引key。

上面两个函数一般成对出现,一个绑定,一个获取绑定值。应用:在category中给对象添加属性:

3.“class_getInstanceMethod(Class_Nullable cls,SEL_Nonnull name)”和“class_getClassMethod(Class_Nullable cls,SEL_Nonnull name)”:获取当前类中的方法,前者是获取对象实例方法,后者获取对象类方法。

cls:被获取方法的实例化对象

SEL name:方法名的selector。

4.“method_exchangeImplementations(Method_Nonnull m1, Method_Nonnull m2) ”被称为黑魔法(method swizzling)

原理:发生在运行时,在运行时将两个method进行交换,我们可以将mehtod Swizzling的代码写在任何地方,但是只有当这段代码执行完成后才能起到交互的作用。所以一般我们使用load+Method Swizzling的方式进行方法的互换,因为load方法在APP运行时就会调用,且只调用一次。

应用地方:有人说,这有什么卵用,我既然知道这两个方法,我就可以在调用selector1方法的时候调用1,在需要selector2方法的时候调用2不就成了吗?对,确实是这样,但问题就出在这里,有些时候,苹果内部为了实现某个功能会自动的调用一系列函数,是我们不知道的。比如tableview的一系列代理方法,比如viewcontroller的一系列生命周期函数。还有一种情况,我们需要给某个系统的方法多添加一个功能,但我们不知道这个系统方法到底做了什么,如果我们重写了,就不能使用他原有的功能,这个时候Method Swizzling就能完美解决。

例子:现在有这样的一个需求,我们需要在tableview reloadData的时候添加一个计数功能。

相关文章

  • <objc/runtime.h>机制下的常用函数

    runtime:运行时,是一个c语言库。将我们编写的代码动态的转换成这个库中的函数,结构体,消息等,实现其他语言运...

  • Runtime看这里 <objc/runtime.h>

    一 、Runtime 简介 Runtime简称运行时。OC就是运行时机制 即在运行时候的一些机制,其中最主要的是消...

  • iOS底层面试题--Runtime

    1、简述一下 OC 的消息机制? OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiv...

  • iOS :runtime

    1、讲一下 OC 的消息机制   OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiv...

  • iOS面试题-runtime(夯实基础学习笔记-温故知新2)

    1.讲一下 OC 的消息机制 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver...

  • iOS-Runtime

    面试题 讲一下 OC 的消息机制OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receive...

  • 底层12:Runtime-消息机制

    面试题:讲一下OC的消息机制。 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receive...

  • runtime - api介绍

    runtime api 介绍 玩一下常用的api objc_系列函数关注于宏观使用,如类于协议的空间分配,注册,注...

  • objc_setAssociatedObject 使用

    objc_setAssociatedObject 是 下的函数,所以需要添加头文件...

  • Runtime

    面试题 1.讲一下OC的消息机制 OC的方法调用其实都是转成了objc_msgSend函数的调用,给receive...

网友评论

      本文标题:<objc/runtime.h>机制下的常用函数

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