美文网首页
方法交换安全实现

方法交换安全实现

作者: 王家薪 | 来源:发表于2018-02-25 10:39 被阅读10次
+ (void)load {
    // 这个是要交换的方法 
    Method method1 = class_getInstanceMethod([UILabel class], @selector(jx_setFont:));
    // 这个是被交换的方法
    Method method2 = class_getInstanceMethod([UILabel class], @selector(setFont:));
    // 首先想类中添加被交换的方法 如果被交换的方法是父类的并且子类没有重写这个方法, 这种情况子类方法列表中是没有被交换的方法的,这样直接交换就会将父类的方法交换掉
    // 所以首先向父类中添加被交换的方法, 如果添加失败 说明子类已经实现被交换的方法 可以放心交换了
    // 如果添加成功 则直接取代
    if (!class_addMethod([UILabel class], @selector(setFont:), method_getImplementation(method1), method_getTypeEncoding(method1))) {
        method_exchangeImplementations(method2, method1);
    } else {
        class_replaceMethod(self, @selector(jx_setFont:), method_getImplementation(method2), method_getTypeEncoding(method2));
    }
  
}

相关文章

  • 方法交换安全实现

  • OC runtime 底层API解析

    关于class的API 交换方法API 替换方法的实现 交换方法的实现

  • RunTime实现

    1:RunTiem交换方法实现 //runTime交换方法实现 // 1,创建已有类的分类,并且实现自己的方...

  • 方法魔法(Method Swizzling)

    原理 交换两个方法的引用,就是调用a方法,实际执行b方法 代码实现 第三方库 RSSwizzle 安全隐患 只在 ...

  • Runtime实例运用-交换方法实现、Method Swizzl

    一.交换两个方法的实现: Runtime还可以交换两个方法的实现。例如:Person有两个方法:study、run...

  • runtime 方法交换

    为 NSString 重写 hasPrefix: 方法实现(交换方法)@implementationNSStrin...

  • iOS 防止方法未实现造成的崩溃

    实现原理基于runtime的方法交换和消息发送机制 方法交换 method_exchangeImplementat...

  • runtime(给分类增加属性)

    常用的地方 1. 动态交换两个方法的实现(特别是实现 交换系统方法的实现) 2. 动态添加对象的成员变量和成员方法...

  • Runtime

    runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)2:通过runti...

  • Day3

    1 runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)。2:通过ru...

网友评论

      本文标题:方法交换安全实现

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