您的位置:首页 > 其它

[10秒学会] - runtime之交换方法

2016-06-05 00:00 393 查看
摘要: [10秒学会] - runtime之交换方法

我们要修改[UIImage imageNamed:@"123"]; 没有该图片时报异常

@property (nonatomic, readonly, copy) NSArray<__kindof UIView *> *subviews;

UIImage+Image.h
+ (__kindof UIImage *)zdc_imageNamed:(NSString *)imageName;

[code=language-objectivec]+ (UIImage *)zdc_imageNamed:(NSString *)imageName
{
// 1.加载图片
UIImage *image = [UIImage zdc_imageNamed:imageName];
/* 这一定要注意  防止死循环 */
/* 这一定要注意  防止死循环 */
/* 这一定要注意  防止死循环 */

// 2.判断功能
if (image == nil) {
NSLog(@"加载image为空");
}

return image;
}

[code=language-objectivec]+ (void)load
{

// 交换方法实现,方法都是定义在类里面
// class_getMethodImplementation:获取方法实现
// class_getInstanceMethod:获取对象
// class_getClassMethod:获取类方法
// IMP:方法实现

// imageNamed
// Class:获取哪个类方法
// SEL:获取方法编号,根据SEL就能去对应的类找方法
Method imageNameMethod = class_getClassMethod([UIImage class], @selector(imageNamed:));

// xmg_imageNamed
Method zdc_imageNamedMethod = class_getClassMethod([UIImage class], @selector(zdc_imageNamed:));

// 交换方法实现
method_exchangeImplementations(imageNameMethod, zdc_imageNamedMethod);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息