Runtime 交换方法
2016-05-16 15:08
316 查看
创建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 }
源自小马哥教学视频
相关文章推荐
- 在VC中如何找到崩溃的源头(二)
- 借款人想通过Netaji货币还款
- 推荐Huploadify实现上传图片或文件
- 第9课:Spark Streaming源码解读之Receiver在Driver的精妙实现全生命周期彻底研究和思考
- Android Studio快捷键汇总(Mac)
- Android Touch 手势触摸原理
- 在VC中如何找到崩溃的源头
- 欢迎使用CSDN-markdown编辑器
- grep a
- unity 有限状态机使用
- 我为什么会离开CSDN博客
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- Android Studio debug使用release的签名
- centos 下mv 命令的一次纠结
- wifi相关
- java 练习题3
- 安卓跑马灯
- oracle如何修改字段?
- 4000 PHP5中PDO的简单使用
- 过程