iOS项目之交换方法(runtime)
在项目中,经常会遇到系统自带的方法满足不了自己的需求,往往我们解决这种情况的时候,都是在分类中添加一个方法。然而很多时候,项目已经开发很长时间了,如果一个一个的去替换系统的方法,太浪费宝贵的时间,所以在这里介绍使用runtime来交换方法。
在这里写了一个小案例:
在项目中使用stringByAppendingString:方法,判断拼接的字符串是否为nil,如果为nil,则改为@"",避免项目崩溃。
在这里要替换的方法是NSString的系统方法,所以在这里创建一个NSString的分类。因为在这里需要使用到runtime,需要导入#import <objc/runtime.h>头文件。在 + (void)load 方法中交换方法即可。下面将代码附上:
#import "NSString+ExchangeMethod.h" #import <objc/runtime.h>@implementation NSString (ExchangeMethod)+ (void)load {// 获取系统的对象方法Method stringByAppendingStringMethod = class_getInstanceMethod(self, @selector(stringByAppendingString:));// 获取自己定义的对象方法Method sjx_stringByAppendingStringMethod = class_getInstanceMethod(self, @selector(sjx_stringByAppendingString:));// 方法交换 method_exchangeImplementations(stringByAppendingStringMethod, sjx_stringByAppendingStringMethod); }- (NSString *)sjx_stringByAppendingString:(NSString *)aString {if (aString == nil || aString.length == 0) {aString = @"输入的字符串为空哦!!";}/*因为已经交换了方法,所以在这里调用 sjx_stringByAppendingString: 实际为 stringByAppendingString: 如果这里写 stringByAppendingString: 会造成死循环*/return [self sjx_stringByAppendingString:aString]; }@end
GitHub:https://github.com/sjxjjx/runtime_exchangeMethod
转载于:https://www.cnblogs.com/sjxjjx/p/6543587.html
iOS项目之交换方法(runtime)相关推荐
- [Runtime]-交换方法
为什么80%的码农都做不了架构师?>>> 1:比如我们有个需求:让UIImage加载图片的时候,告诉我们是否加载成功了 前言: /** Runtime(交换方法):只要是想修 ...
- ios项目生成ipa文件的真正简单可用的方法
首先要有证书,没有证书请飘过 然后打开需要生成ipa的ios项目. 在运行按钮的后面选择ios Device 然后点击Product 按钮,选择第五个Archive 这时候会弹出几次要密钥的警告框,只 ...
- 李洪强iOS经典面试题156 - Runtime详解(面试必备)
李洪强iOS经典面试题156 - Runtime详解(面试必备) 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...
- iOS 项目源码大全 github 国内外大神
github排名https://github.com/trending,github搜索:https://github.com/search 主要工作说明: 重新整理了Xcode好用的插件,信息更详细 ...
- 消除Xcode iOS项目的警告
消除Xcode iOS项目的警告 作者 犯傻小二 关注 2016.03.10 15:22* 字数 8287 阅读 3839 评论 0 喜欢 7 如果你有强迫症,看到项目中那么多警告肯定特别心烦 ...
- iOS项目开发实战——开发基于Handoff的App(Swift)
iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行.这个在iOS8 ...
- 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)
2016年GitHub 排名前 100 的安卓.iOS项目简介(收藏) 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android ...
- iOS 项目整体是竖屏,个别页面支持横屏
最近在做一个视频APP,工程整体是竖屏的,如下图,播放器需支持横屏.在转屏的过程遇到很痛苦的问题.[UIApplication sharedApplication].statusBarOrientat ...
- IOS项目之分层MVVM
在做.Net时,有用到三层架构,使项目分层.ios项目使用AFNetWork把网络层这块也放进了ViewController中,数据解析缓存这些也在里面,这样层次结构可能不够清楚,今天就试着分离了一下 ...
最新文章
- 【PP】SAP库存决定
- 【ArcGIS风暴】在ArcGIS中实现将一个圆16等分
- Thrift 异步模式
- Delphi – 我的代码之简单五子棋
- 我发现有的人就活该他赚钱,他们的脑子就是个聚宝盆
- Linux LVM动态扩容
- 【c4d学习笔记】OC渲染器安装问题
- 《算法导论》 第28章 矩阵运算
- uboot移植之迷雾解码
- 基于GoogleMap,Mapabc,51ditu,VirtualEarth,YahooMap Api接口的Jquery插件的通用实现(含源代码下载) --转...
- AI仿生:人类进化新可能
- 记一次投稿springer期刊,利用tex排版文稿
- 3D-2D三维重建:PnP
- power Designer VBS 脚步 通过 excel 生成实体,不用一个一个的输入。
- live555 日志
- 几种简单方法找回丢失的IE图标
- javascript H5解决手机拍照图片被旋转问题
- 3D打印机开源项目遭克隆或成开源拐点
- 语音广播服务器,Luna云语音平台广播系统
- 计算机网络--2020春-平时小测2--习题答案
热门文章
- 用php获取本周,上周,本月,上月,本季度日期的代码
- DOM中的onbeforeunload函数
- 用Redis快速实现BloomFilter!
- linux查看与修改交换内存配置(解决zabbix-agent启动报错)
- 树网的核(codevs 1167)
- Lucene查询索引(分页)
- ffmpeg常用转换命令,支持WAV转AMR
- Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压...
- vue click事件冒泡,默认行为
- 集合框架源码学习之HashMap(JDK1.8)