iOS之runtime

runtime
    简介:
        1.通过 Objective-C
            直接编写 Objective-C 代码 在程序运行期间会自动将代码转换成相应的结构体和函数。
        2.通过NSObject的方法 NSObject方法定义了许多方法用来直接调用Runtime里面的方法
            isKindOfClass:;isMemberOfClass:
            respondsToSelector:
            conformsToProtocol:
            methodForSelector:
        3.直接操作runtime方法
            runtime系统是一个C语言静态库,它拥有许多函数和结构体数据 需要导入<objc/runtime.h>
    Class:Class结构体主要存储类的实例变量和实例方法
        OC编译之后 类是由Class表示 实际指向objc_class结构体
        isa:指向metaClass(元类) 存储类的类方法和类变量
        super_class:指向父类
        methodLists:该类的方法列表
        ivars:存储类的成员变量的信息
    Method:是runtime内部定义的函数,用来代表一个方法
        介绍:
            SEL method_name:方法选择器的名字 用来区分方法的ID
                获取SEL的方法
                    1、@selector()
                    2、NSSelectorFromString()
                    3、sel_registerName函数
            char *method_types:类型 存储着方法的参数类型和返回值类型
            IMP method_imp:指向此方法的具体实现 指向的方法在内存中的位置
    Ivar:实例变量
 
    使用
        获取类名:class_getName
        获取父类名:class_getSuperclass
        获得实例变量的大小:class_getInstanceSize
 
        获得方法名:method_getName
        获得方法的实现:method_getImplementation
        获得方法的参数 和返回值类型的字符串:method_getTypeEncoding
        获得方法参数的个数:method_getNumberOfArguments
        设置实现方法:method_setImplementation
        交换两个方法:method_exchangeImplementations
        发送消息:objc_msgSend
        添加重写 一个方法:class_addMethod
        替换方法:class_replaceMethod
        获得实例方法:class_getInstanceMethod
        获得所有实例方法:class_copyMethodList
        获得方法的实现IMP:class_getMethodImplementation
        查询是否响应某个方法:class_respondsToSelector 

posted on 2016-05-05 23:06  在一起的浅蓝色  阅读(100)  评论(0编辑  收藏  举报

导航