runtime在实际开发中的应用-Swizzle黑魔法

其实就是对系统方法进行替换,由于某种原因,我们要改变这个方法的实现,但是又不能去动源码,这个时候runtime就排上用场了

 

比如说要imageNamed:方法,增加一些判断,做一些操作,建一个类别:

@implementation UIImage (image)

+ (void)load

{

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

    Method xmg_imageNamedMethod = class_getClassMethod(self, @selector(xmg_imageNamed:));    

    method_exchangeImplementations(imageNamedMethod, xmg_imageNamedMethod);

}

 

+ (UIImage *)xmg_imageNamed:(NSString *)name

{

    UIImage *image = [UIImage xmg_imageNamed:name];

    if (image)

    {

        NSLog(@"=======加载成功");

    }else

    {

        NSLog(@"======加载失败");

    }

    return image;

}

@end

 

这样就可以实现了!

 

利用以上思路,我们还可以给 NSObject 添加分类,统计创建了多少个对象,给控制器添加分类,统计有创建了多少个控制器,特别是公司需求总变的时候,在一些原有控件或模块上添加一个功能,建议使用该方法!

posted on 2019-01-07 17:10  奔跑中的小谷子  阅读(180)  评论(0)    收藏  举报