runtime应用场景

在实际开发中,当第三方框架或者系统原生方法功能不能满足我们的时候,我们可以在保持系统原有方法功能的基础上,额外增加的功能。

场景一:加载一张图片直接用[UIImage imageNamed:@”image”],如何知道加载成功。

是无法知道到底有没有加载成功。给系统的imageNamed添加额外功能(是否加载图片成功)。

实现步骤:1.给系统的方法添加分类2.自己实现一个带有扩展功能的方法3.交换方法,只需要交换一次。

#import "UIImage+Image.h"

@implementation UIImage(Image)

/**

 load方法: 把类加载进内存的时候调用,只会调用一次

 方法应先交换,再去调用

 */

+ (void)load{

    // 1.获取 imageNamed方法地址

    // class_getClassMethod(获取某个类的方法)

    Method imageNamedMethod = class_getClassMethod(self,@selector(imageNamed:));

    // 2.获取 ln_imageNamed方法地址

    Method ln_imageNamedMethod = class_getClassMethod(self,@selector(ln_imageNamed:));

    // 3.交换方法地址,相当于交换实现方式;「method_exchangeImplementations 交换两个方法的实现」

    method_exchangeImplementations(imageNamedMethod, ln_imageNamedMethod);

}

// 加载图片 且 带判断是否加载成功

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

    UIImage *image = [UIImage ln_imageNamed:name];

    if(image) {

        NSLog(@"runtime添加额外功能--加载成功");

    }else{

        NSLog(@"runtime添加额外功能--加载失败");

    }

    returnimage;

}

你可能感兴趣的:(runtime应用场景)