runtime真的超级好用

前几天产品提出新需求,大致就是需要把这个项目所有关于图片加载的状态告诉用户提高用户体验,听到这里就觉得大事不妙了,毕竟是两年多的项目,改起来不难但是会很麻烦。之前有看过runtime的文档所以就谢了个demo试下,结果几分钟改完,测试完全ok。今天分享下代码,很简单老鸟勿喷。

因为runtime有一个交换方法的API我们借助这个API就实现了。首先我们先在分类自定义一个我们自己的方法(+ (instancetype)imageWithName:(NSString *)name),有人会喷为什么不在分类里直接重写(因为会把系统的功能给覆盖掉,而且分类中不能调用super.)

+ (void)load
{
    
    Method imageWithName = class_getClassMethod(self, @selector(imageWithName:));
    
    Method imageName = class_getClassMethod(self, @selector(imageNamed:));
    
    method_exchangeImplementations(imageWithName, imageName);
    
    
}

+ (instancetype)imageWithName:(NSString *)name
{
   
    UIImage *image = [self imageWithName:name];
    
    if (image == nil) {
        NSLog(@"状态信息打印");
    }
    
    return image;
}
简简单单几行代码就把系统的imageNamed:方法替换成我们的imageWithName:name靠谱的可以试下

时间: 2024-10-10 07:53:57

runtime真的超级好用的相关文章

jquery实现导航栏鼠标点击后实行背景高亮,点击离开恢复(超级简单!!!!)

昨天才写了一个方法,今天发现一个更简单的. html: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div class="dianji"> <div>div1</div>

v语言怎么玩

直接上github: https://github.com/vlang/v 前戏 大概是在6月份的时候,在github上看到了这个玩意,我以为是??? 我下意识的去查了一下有没有人在讨论这个语言,但是关于这货的在国内讨论比较少 噱头如下: Simplicity: the language can be learned in less than an hour (有编程基础的人学起来很简单) Fast compilation: ~100k loc/s right now, ~1.2 million

腾讯笔试题:满二叉排序树,任给3个子节点,找他们最大的公共父节点

腾讯笔试题出现了和这个类似的题目,没做出来,现在来好好解决这个问题吧,先从基本的开始. 先吐槽一下:感觉算法设计什么的,真的超级难,也许是我头脑太笨,转不过弯来吧,呵呵. 题目是这样的:一棵满二叉排序树,有K层,节点的值依次为 1~2k-1.现在告诉你树的高度是4层,给定你3个节点,比如9,11, 13,那么最大的公共父节点是12. 现在想起来这题我已经想出来一半了呀,但是大概人在紧张的时候大脑会思维短路,跳不出原有的思维陷阱.想法是这样的: 1. 首先是从根节点开始,如果给的三个叶节点的值其中

未来Linux系统将是运维行业必备的技能之一

关于linux,这个并不是每个人都能用或者需要用的,因为平时有很多人用电脑只是为了上上网,聊聊天,打打游戏,这个是完全不需要用linux的.关于linux,是不能用正常的大家所熟知的window来认知的,linux是需要用一个严谨的科学工作者的身份来要求. 对于学习linux我有一些自己的经验,上了大学,大一的时候还是个好孩子,每天泡图书馆学习,大一结束时,进了学校的实验室,我本科学的是电子信息工程,到了实验室,才体验了不一样的生活,基本每天都是凌晨一点之后才睡觉,那时候还没有学习linux,基

Java Web(四) 一次性验证码的代码实现

其实实现代码的逻辑非常简单,真的超级超级简单. 1.在登录页面上login.jsp将验证码图片使用标签<img src="xxx">将绘制验证码图片的url给它 2.在服务器端就两个servlet,一个就是用来绘制验证码图片的VerifyCodeServlet,另一个就是登录时验证验证码是否点写正确或是否重复提交的LoginServlet 3.在VerifyCodeServlet中,将验证码的四个字母存入session中,然后在LoginServlet中,将请求中提交过来的

你有哪些用计算机技能解决生活问题的经历?

程序猎人 ,2002年开始程序员生涯.工作以外喜欢做些… 409 人赞同 做医院的项目,产品上线之前,为了让医院的工作人员体验一下新系统,我们的传统是要组织医院的人员进行一次到两次彩排.在彩排中发现的问题,会让参加的人写在反馈表上提交上来.最近一次参加的彩排,医院的人员都很认真地参与了进来,为了模拟眼睛不好的患者,还特意带上了故意做成雾蒙蒙的眼镜:为了模拟行动不便的患者,特地穿上了限制腿脚行动的衣服……参加完彩排,那些人也很认真地填写反馈表.导致前前后后收上来上千张纸. 反馈表收上来之后,有专人

关于把本地项目文件上传到github

真的超级无奈,百度上查了好久才搞定了把自己的文件上传到github上,多久?几个小时<摊手> 于是得赶紧记录下来,以备不时之需,怕自己又忘了 1首先得安装git到自己的电脑上 2在github上注册个账号 这些都很简单就不详细写了 3在自己的githu上开一个仓库 点击+号 new repository 建立一个仓库名,我这里是repository 4.接下来,在自己即将上传的项目文件根目录上,右键 git bash:<1>,创建本地仓库 git init 初始化本地仓库 git

Ubuntu 16.04配置OpenGL教程

sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev sudo apt-get install freeglut3-dev 网上有些教程最后一步是sudo apt-get install libglut-dev,但是会报错Unable to locate package libglut-dev,谷歌错误信息后搜到stackove

SFDC(12)杂谈

突然想到自己做开发时遇到的一些小小问题,希望和大家交流一下. 1,对于数据库的操作,宜一次多条,忌多次一条,举例来说.我要往Account表中插入5条数据,通常有两种写法, i for(integer i=0:i<5;i++ ){ Account a = new Account(); insert a; } ii list<Account> accountInsertList = new list<Account>(); for(integer i=0:i<5;i++