數(shù)組是開發(fā)中經(jīng)常用到的一個(gè)類,開發(fā)中常常遇到的就是添加對(duì)象到數(shù)組,和從數(shù)組中取對(duì)象。當(dāng)從服務(wù)器或者其他一些地方獲取數(shù)據(jù)為空的時(shí)候,不慎添加至數(shù)據(jù),或者取值數(shù)組越界就會(huì)崩潰。下面利用runtime解決這兩個(gè)問(wèn)題。
1、添加nil到數(shù)組
在NSMutableArray類別方法中,重寫load方法,利用runtime進(jìn)行方法交換,如下圖

使用自定義的方法wtkAddObject來(lái)替換系統(tǒng)的addObject。load方法為第一次加載該類時(shí)調(diào)用,所以即使不導(dǎo)入類別的頭文件,也會(huì)走這個(gè)方法。另外,NSMutableArray的真正類型為__NSArrayM.
自定義方法:

添加至數(shù)組前,先判斷obj是否為空。需要注意的是,這里不能調(diào)用系統(tǒng)的addObject,否則會(huì)死循環(huán)。這點(diǎn)一開始一直不理解,百度也沒有搜到。后來(lái)終于想通,IMP方法已經(jīng)交換,所以才會(huì)調(diào)用自定義的方法。
2、數(shù)組越界
交換方法與上邊的一樣,都是在load方法中進(jìn)行,如下圖

使用自定義的objectAtIndex來(lái)替換系統(tǒng)的

可以在數(shù)組越界的分支里邊來(lái)進(jìn)行所需要的操作。else里邊原理與上邊一致。