zoukankan      html  css  js  c++  java
  • 一, Runtime 交换方法

    场景:一般加载图片的时候会有一个placeholder图片,默认图片加载,如果说加载失败就会手动去设置这个默认图片,如果加载图片多,就需要手动加载很多位置

    用runtime机制里面的交换方法,即可省去加载默认图片

    实现思路:UIImage图片有一个imageNamed的方法 我们只需要写一个方法与此来交换,在加载失败的情况默认显示我们那个方法里面的默认图片

    实现步骤:

    1,新建一个Objective - C File 文件 file 规范些category     file type选择Category    class:UIImage 即可

    .h文件需要写一个方法 注意;要与系统的方法区分,加个前缀即可

    如:+ (UIImage *)LL_imageNamed:(NSString *)name;

    .m文件

    #import <objc/message.h> //引入runtime

    load 是只要类所在文件被引用就会被调用 自动调用  只调用一次

    + (void)load{

    //方法交换 就要用Method去拿到系统方法 imageNamed 和  当前手动写的方法LL_imageNamed

    Method imagenameMethod = class_getClassMethod(self,  @selector(imageNamed:));//拿到系统方法

    Method LL_imageNameMethod = class_getClassMethod(self, @selector(LL_imageNamed:));//拿到手动写的方法

    //runtime进行交换即可  完成交换动作

    method_exchangeImplementations(imagenameMethod, LL_imageNameMethod);

    }

    //实现方法

    + (UIImage *)LL_imageNamed:(NSString *)name{

    UIImage *image = [UIImage LL_imageNamed:name];

        if(nil == image){

      //加载失败  在这里做你想做的

            /** 如果图片加载失败 显示默认的图片 **/

            image = [UIImage LL_imageNamed:@"moren.jpg"];

        }

        return image;

    写到这的时候 runtime的交换方法可以写完

    回到vc页面 直接调用

     /** 图片加载失败 通过runtime设置默认图片 **/

        self.showimage = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];

    //imageNamed 已经被我们自己写的方法给替换掉了,这里没有图片的情况下默认显示LL_imageNamed这个里面的图片

        self.showimage.image = [UIImage imageNamed:@""];

        [self.view addSubview:self.showimage];

  • 相关阅读:
    c#RSA的SHA1加密与AES加密、解密
    c#后台代码请求访问api接口
    Hbuilder给手机发送短信与拨打电话
    Hbuilder获取手机当前地理位置的天气
    plus.webview.create( url, id, styles, extras )参数及说明
    九九乘法表+冒泡排序(校园回忆录)
    c#数据处理总结(分组、交并差与递归)
    Hbuilder MUI 下拉选择与时间选择器
    JAVA常用开源工具与项目
    mysql 中常用功能
  • 原文地址:https://www.cnblogs.com/liaolijun/p/7895683.html
Copyright © 2011-2022 走看看