Runtime之方法交换

1.首先导入头文件
2.编写MyImageNamed:方法

// 运行时

// 先写一个其他方法,实现这个功能

// 在分类里面不能调用super,分类木有父类
//+ (UIImage *)imageNamed:(NSString *)name
//{
//    [super im]
//}

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

3.在使用之前调用交换方法,这里交换的两个方法分别是imageNamed: 和MyImageNamed:

    // 交换方法实现,方法都是定义在类里面
    // class_getMethodImplementation:获取方法实现
    // class_getInstanceMethod:获取对象
    // class_getClassMethod:获取类方法
    // IMP:方法实现
    
    // imageNamed
    // Class:获取哪个类方法
    // SEL:获取方法编号,根据SEL就能去对应的类找方法
    Method imageNameMethod = class_getClassMethod([UIImage class], @selector(imageNamed:));
    
    // MyImageNamed
    Method MyImageNamedMethod = class_getClassMethod([UIImage class], @selector(MyImageNamed:));
    
    // 交换方法实现
    method_exchangeImplementations(imageNameMethod, MyImageNamedMethod);

你可能感兴趣的:(Runtime之方法交换)