• runtime 总结(原创)


    runtime实际运用场景

    1.使用runtime可以读取iOS系统类有哪些私有属性,并通过kvc或者函数修改或者读取其值。

    Ivar *class_copyIvarList(Class cls, unsigned int *outCount)  读取某个类所有属性和成员变量

    objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount) 读取某个类所有属性

    const char *ivar_getName(Ivar v)  返回属性或成员变量的名字 同理 property_getName

    ivar_getTypeEncoding 获取类型

    object_setIvar 修改属性值

     

    2.在运行时动态添加新的函数、修改私有函数、交换其中两个私有函数的实现、替换私有函数.

    IMP class_replaceMethod(Class cls, SEL name, IMP imp, 

                                        const char *types)  替换函数或方法

    void class_replaceProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount) 替换属性

    SEL

    这个是方法名称的描述。

    IMP

    这个是具体的方法的地址。

    NSObject 类中的methodForSelector:方法就是这样一个获取指向方法实现IMP 的指针,methodForSelector:返回的指针和赋值的变量类型必须完全一致,包括方法的参数类型和返回值类型。 // SEL --> IMP

     

    3.动态挂载对象

    如果你在对象传递(传参)的时候需要用到某个属性,按照以往的思路:我继承这个类重新一个新类就完事了,OK,这个思路没有问题,但是你不觉得要新建一个.h和一个.m文件有点麻烦?程序员都是懒惰的,要是有一个方法能直接讲我想要的属性挂载上前去岂不是更好?代码简单、易懂。看了标题你就应该知道Runtime能帮你实现你的愿望。

    常用于UIAlertView ,或者给分类添加属性。

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

    id objc_getAssociatedObject(id object, const void *key)

     

    isa 指针是当你向对象发送消息时,Objective-C Runtime 检查一个对象并且查看它的类是什么然后开始查看它是否响应这些 selectors 所需要的一切。

     

    4.数据模型转换

  • 相关阅读:
    Python进阶-数据库操作
    Python进阶-数据库(MySQL)介绍与基本操作
    Python进阶-网络编程之TCP粘包
    表与表之间的关系
    基本数据类型
    mysql
    io模型
    GIL,线程池与进程池
    线程
    并发编程,进程
  • 原文地址:https://www.cnblogs.com/iOSJason/p/5555802.html
Copyright © 2020-2023  润新知