runtime之数组巧用

来源:互联网 时间:2017-01-22


数组是开发中经常用到的一个类,开发中常常遇到的就是添加对象到数组,和从数组中取对象。当从服务器或者其他一些地方获取数据为空的时候,不慎添加至数据,或者取值数组越界就会崩溃。下面利用runtime解决这两个问题。

1、添加nil到数组

在NSMutableArray类别方法中,重写load方法,利用runtime进行方法交换,如下图




使用自定义的方法wtkAddObject来替换系统的addObject。load方法为第一次加载该类时调用,所以即使不导入类别的头文件,也会走这个方法。另外,NSMutableArray的真正类型为__NSArrayM.

自定义方法:



添加至数组前,先判断obj是否为空。需要注意的是,这里不能调用系统的addObject,否则会死循环。这点一开始一直不理解,百度也没有搜到。后来终于想通,IMP方法已经交换,所以才会调用自定义的方法。

2、数组越界

交换方法与上边的一样,都是在load方法中进行,如下图



使用自定义的objectAtIndex来替换系统的



可以在数组越界的分支里边来进行所需要的操作。else里边原理与上边一致。




相关阅读:
Top