美文网首页
runtime交换方法 每天学一点

runtime交换方法 每天学一点

作者: 苏苏咯 | 来源:发表于2017-03-28 23:34 被阅读36次

我们在做开发的时候比如系统自带的方法功能不够,给系统自带的方法扩展一些功能,并且保持原有的功能。
目前需求 :给imageNamed 方法提供功能,每次加载图片就判断下图片是否加载成功。
两种办法
方式一:继承UIImage.重写方法
方式二:使用runtime,交换方法

分类里不能调用super 分类木有父类

/*
+(UIImage*)imageNamed:(NSString *)name
{
    
}
 */

这个时候我们要再返回参数加kindof

+(__kindof UIImage*)SJ_imageNamed:(NSString *)imageName
{
    //1.加载图片
    UIImage *image=[UIImage SJ_imageNamed:imageName];
    //2.判断功能
    if (image==nil)
    {
        NSLog(@"加载image为空");
    }
    return image;
}

下面介绍runtime方法交换

类别也走load 方法所以 我们在进行runtime交换方法的时候要在load方法里实现

+(void)load
{
    //获取方法实现
    //class_getMethodImplementation(<#__unsafe_unretained Class cls#>, <#SEL name#>)
    //获取对象方法
   // class_getInstanceMethod(, <#SEL name#>)
    //获取类方法
    //class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>)
    //交换方法实现
    
    Method imageNameMetha=class_getClassMethod([UIImage class], @selector(imageNamed:));
    Method imageNameSJmetha=class_getClassMethod([UIImage class], @selector(SJ_imageNamed:));

//exchange:交换  
    method_exchangeImplementations(imageNameMetha, imageNameSJmetha);
}

相关文章

  • runtime交换方法 每天学一点

    我们在做开发的时候比如系统自带的方法功能不够,给系统自带的方法扩展一些功能,并且保持原有的功能。目前需求 :给im...

  • runtime

    runtime交换方法 动态添加方法

  • runTime常用方法

    使用runTime改变实例成员的值 使用runtime来交换两个方法 注意再次调用该方法不交换 使用runTime...

  • Runtime

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

  • Day3

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

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • 查看SDK调用支付宝参数

    使用runtime 方法交换openurl

  • objc runtime (四)动态添加属性

    在《objc runtime (二)交换方法》中我提到过runtime最实用的就是交换方法和动态添加属性两个用法。...

  • iOS runtime如何交换两个类方法

    如有转载,请标明出处:iOS runtime如何交换两个类方法 runtime交换实例方法,老生常谈的问题,很多b...

  • iOS -- runtime的应用

    runtime主要有一下几种应用场景 方法交换 添加属性 (一)方法交换 (1)字体适配 方法交换实际交换的是方法...

网友评论

      本文标题:runtime交换方法 每天学一点

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