• 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 }

    源自小马哥教学视频

  • 相关阅读:
    2016第19周三
    2016第19周二
    Android JNI 获取应用程序签名
    HDU 3830 Checkers
    hadoop记录topk
    Codeforces 4A-Watermelon(意甲冠军)
    经验38--新闻内容处理
    Java8高中并发
    ACM-简单的主题Ignatius and the Princess II——hdu1027
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/mapanguan/p/5498161.html
Copyright © 2020-2023  润新知