mapanguan

导航

Runtime 交换方法

创建UIImage分类
UIImage+Image.h #import<UIKit/UIKit.h> @interfaceUIImage (Image) + (__kindof UIImage*)xmg_imageNamed:(NSString*)imageName; @end UIImage+Image.m #import"UIImage+Image.h" #import<objc/message.h> @implementationUIImage (Image) //加载这个分类的时候调用 + (void)load { //交换方法实现,方法都是定义在类里面 // class_getMethodImplementation:获取方法实现 // class_getInstanceMethod:获取对象 // class_getClassMethod:获取类方法 // IMP:方法实现 // imageNamed // Class:获取哪个类方法 // SEL:获取方法编号,根据SEL就能去对应的类找方法 MethodimageNameMethod =class_getClassMethod([UIImageclass],@selector(imageNamed:)); // xmg_imageNamed Methodxmg_imageNamedMethod =class_getClassMethod([UIImageclass],@selector(xmg_imageNamed:)); //交换方法实现 method_exchangeImplementations(imageNameMethod, xmg_imageNamedMethod); } //运行时 //先写一个其他方法,实现这个功能 //在分类里面不能调用super,分类木有父类 //+ (UIImage *)imageNamed:(NSString *)name //{ // [super im] //} + (UIImage*)xmg_imageNamed:(NSString*)imageName { // 1.加载图片 UIImage*image = [UIImagexmg_imageNamed:imageName]; // 2.判断功能 if(image ==nil) { NSLog(@"加载image为空"); } returnimage; } @end 方法调换调用 #import"ViewController.h" //#import "UIImage+Image.h" @interfaceViewController() @end @implementationViewController - (void)viewDidLoad { [superviewDidLoad]; //UIImage *image = [UIImage imageNamed:@"123"]; // 1.每次使用,都需要导入头文件 // 2.当一个项目开发太久,使用这个方式不靠谱 [UIImageimageNamed:@"123"]; // imageNamed: //实现方法:底层调用xmg_imageNamed //本质:交换两个方法的实现imageNamed和xmg_imageNamed方法 //调用imageNamed其实就是调用xmg_imageNamed }

源自小马哥教学视频

posted on 2016-05-16 15:08  mapanguan  阅读(227)  评论(0编辑  收藏  举报