Runtime Method Swizzling开发实例汇总

什么是Method Swizzling,在iOS开发中它有什么作用?

简单来说我们主要是使用Method Swizzling来把系统的方法交换为我们自己的方法,从而给系统方法添加一些我们想要的功能。已经有很多文章从各个角度解释Method Swizzling的涵义甚至实现机制,该篇文章主要列举Method Swizzling在开发中的一些现实用例。希望阅读文章的朋友们也可以提供一些文中尚未举出的例子。

在列举之前,我们可以将Method Swizzling功能封装为类方法,作为NSObject的类别,这样我们后续调用也会方便些。

实例一:替换ViewController生命周期方法

App跳转到某具有网络请求的界面时,为了用户体验效果常会添加加载栏或进度条来显示当前请求情况或进度。这种界面都会存在这样一个问题,在请求较慢时,用户手动退出界面,这时候需要去除加载栏。
当然可以依次在每个界面的viewWillDisappear方法中添加去除方法,但如果类似的界面过多,一味的复制粘贴也不是方法。这时候就能体现Method Swizzling的作用了,我们可以替换系统的viewWillDisappear方法,使得每当执行该方法时即自动去除加载栏。

代码如上,这样就不用考虑界面是否移除加载栏的问题了。

实例二:解决获取索引、添加、删除元素越界崩溃问题

对于NSArray、NSDictionary、NSMutableArray、NSMutableDictionary不免会进行索引访问、添加、删除元素的操作,越界问题也是很常见,这时我们可以通过Method Swizzling解决这些问题,越界给予提示防止崩溃。

这里以NSMutableArray为例说明