美文网首页
替换类函数

替换类函数

作者: 111浪子111 | 来源:发表于2017-08-30 10:01 被阅读12次

static IMP originIMP;

static id replacedMethod(id self,SEL _cmd, id view1, NSLayoutAttribute attr1,NSLayoutRelation relation,id view2,NSLayoutAttribute attr2

,CGFloat multiplier,CGFloat c)

{

//    NSAssert(multiplier != 0, @"error !!!1multiplier is 0");

NSLog(@"constraintWithItem:%@",self);

if (multiplier == 0) {

NSLog(@"error !!!1multiplier is 0");

}

id result = ((id(*)(id,SEL, id, NSLayoutAttribute,NSLayoutRelation,id,NSLayoutAttribute

,CGFloat,CGFloat))originIMP)(self,_cmd,view1,attr1,relation,view2,attr2,multiplier,c);

return result;

}

+(instancetype)replacedConstraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c

{

//    NSAssert(multiplier != 0, @"error !!!1multiplier is 0");

NSLog(@"replacedConstraintWithItem:%@,multiplier:%f,attr1:%d,view2:%@",view1,multiplier,(int)attr1,view2);

if (multiplier == 0&&NSLayoutAttributeWidth!=attr1&&NSLayoutAttributeHeight!=attr1) {

NSLog(@"error !!!1multiplier is 0");

}

if (view2 == nil&&NSLayoutAttributeWidth!=attr1&&NSLayoutAttributeHeight!=attr1) {

NSLog(@"view2 is nil");

}

id result = ((id(*)(id,SEL, id, NSLayoutAttribute,NSLayoutRelation,id,NSLayoutAttribute

,CGFloat,CGFloat))originIMP)(self,_cmd,view1,attr1,relation,view2,attr2,multiplier,c);

return result;

}

#ifdef DEBUG

Method oriMethod = class_getClassMethod([NSLayoutConstraint class], @selector(constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:));

originIMP = method_getImplementation(oriMethod);

//    originIMP = class_replaceMethod([NSLayoutConstraint class], @selector(constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:), (IMP)replacedMethod, method_getTypeEncoding(method));

Method replacedMethod = class_getClassMethod([self class], @selector(replacedConstraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:));

method_exchangeImplementations(oriMethod, replacedMethod);

//originIMP = class_replaceMethod(objc_getMetaClass("NSLayoutConstraint"), @selector(constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:), (IMP)replacedMethod, method_getTypeEncoding(oriMethod));

#endif

相关文章

  • 替换类函数

    static IMP originIMP; static id replacedMethod(id self,SE...

  • 神奇的runtime

    (1)在运行时对函数进行动态替换 : class_replaceMethod 使用该函数可以在运行时动态替换某个类...

  • C++多态

    c++的多态总结是:当派生类被强制类型转换为基类时,派生类的虚函数表地址是不会被替换为基类的虚函数表地址的。 运行...

  • C#多态的几种方法对比

    方法替换(new) 和 虚函数virtual 重写override 抽象方法 abstract 使用抽象类的情况:...

  • PHP内置函数

    替换字符串 str_replace 判断函数是否存在 function_exists 判断类是否存在 class_...

  • Vuex(三) —— 纯手写一个超简单的Vuex

    目录 分析Vuex的功能 下载模板 分析模块结构 实现install函数 实现Store类 替换vuex 前面学了...

  • 在函数链中运行函数:替换指定字符串的函数(Java)

    下面我们写一个简单的替换指定字符的函数,此函数可以在函数链上运行。 在String这个类中,有一个replaceA...

  • java lambda 表达式

    java lambda 表达式 lambda 是 java 8 引入的新特性,lambda 能替换简单的函数和类,...

  • js 继承

    4种继承方式 原型式继承给原型对象添加属性原型替换子类的原型对象替换为父类的原型对象 原型链继承 借用构造函数继承...

  • qmake 手册 013 替换函数

    qmake手册013替换函数 qmake 提供了在配置过程中处理变量内容的函数。这些函数称为替换函数。通常,它们返...

网友评论

      本文标题:替换类函数

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