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 添加分类,统计创建了多少个对象,给控制器添加分类,统计有创建了多少个控制器,特别是公司需求总变的时候,在一些原有控件或模块上添加一个功能,建议使用该方法!
浙公网安备 33010602011771号