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:@""]; // imageNamed:
//实现方法:底层调用xmg_imageNamed //本质:交换两个方法的实现imageNamed和xmg_imageNamed方法
//调用imageNamed其实就是调用xmg_imageNamed }
源自小马哥教学视频
Runtime 交换方法的更多相关文章
- ios开发runtime学习二:runtime交换方法
#import "ViewController.h" /* Runtime(交换方法):主要想修改系统的方法实现 需求: 比如说有一个项目,已经开发了2年,忽然项目负责人添加一个功 ...
- ios - runtime运行时应用---交换方法
runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundColor的方法换成了自定义的pb_setBackgroundColor 首先创建UIV ...
- iOS项目之交换方法(runtime)
在项目中,经常会遇到系统自带的方法满足不了自己的需求,往往我们解决这种情况的时候,都是在分类中添加一个方法.然而很多时候,项目已经开发很长时间了,如果一个一个的去替换系统的方法,太浪费宝贵的时间,所以 ...
- runtime之方法的交换
工作中没怎么用到runtime的东西,所以一直没怎么看,现在开始拿起来. runtime之方法的交换: 都知道OC中有category可以对已知类进行扩展,但是假如工程中需要修改某类的原方法,若用ca ...
- Runtime之方法交换
在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写.和借助类别重名方法暴力抢先之外,还有就是方法交换 方法交换的原理:在OC中调用一个方法其实是向一个对象发送消息,查找消息的唯一 ...
- Runtime之方法
前两篇介绍了类与对象.成员变量&属性&关联对象的相关知识,本篇我们将开始讲解Runtime中最有意思的一部分内容:消息处理机制.我们从一个示例开始. 在OC中,我们使用下面这种方式来调 ...
- Java Runtime.availableProcessors()方法
Java Runtime.availableProcessors()方法用法实例教程. 描述 java.lang.Runtime.availableProcessors() 方法返回到Java虚拟 ...
- ios-动态添加方法,交换方法,重定向方法
新建一个类Person,Person.h 不写代码,Person.m 有如下两个方法: - (void)eat { NSLog(@"xxx eat===="); } [动态添加方法 ...
- Mac下 eclipse target runtime com.genuitec.runtime 解决方法
Mac下 eclipse target runtime com.genuitec.runtime 解决方法 解决步骤如下: 首先是找到工程项目一个名叫.settings的文件夹,里面有个叫 org.e ...
随机推荐
- NMAP 基本用法
Nmap 用途: 1.通过对设备或者防火墙的探测来审计它的安全性. 2.探测目标主机所开放的端口. 3.网络存储,网络映射,维护和资产管理.(这个有待深入) 4.通过识别新的服务器审计网络的安全性. ...
- HR开发 操作信息类型数据
1.通过函数操作. . DATA: ZRETURN TYPE BAPIRETURN1, ZPAKEY TYPE BAPIPAKEY. GET PERNR. LOOP AT P0001 WHERE .. ...
- 第二章 Mybatis代码生成工具
1.mybatis-generator作用 1).生成pojo 与 数据库结构对应 2).如果有主键,能匹配主键 3).如果没有主键,可以用其他字段去匹配 4).动态select,update,del ...
- 在Linux上配置xampp后远程访问域名报错
在Linux上配置xampp后远程访问域名报错: New XAMPP security concept: Access to the requested object is only availabl ...
- My安卓知识3--多个activity之前共享数据的方法
在网上搜这个问题的时候看到了有一篇文章说有五种方法: 1.基于消息的通信机制 Intent ---boudle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStrea ...
- C#范型不会用,求助~
using Dapper; using Dapper.Contrib.Extensions; using System.Data.SqlClient; using System.Configurati ...
- vios 虚拟光驱 安装vioc
一.VIO server 创建虚拟光驱 1 检查是否创建Library $lsrep 2 创建 VMLibrary :vg 和size都可以自己定义 $mkrep -sp rootvg -size 1 ...
- javascript:history.go()和History.back()的区别(转载)
javascript:history.go()和History.back()的区别 <input type=button value=刷新 onclick="window. ...
- ADO.net操作数据库
今天整理硬盘,发现2年前开始着手开始学习C#的学习日记.陆续整理,一是自己的知识梳理梳理,二是希望与大家多多交流,能给初学者带来一定帮助,当然是更高兴的啦. 断线对象 另一类是与数据源无关的断线对象, ...
- Unity加载模块深度解析(Shader)
作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...