RuntimeMethodSwizzling編程方式, 也可以叫作AOP(Aspect-Oriented Programming, 面向切面編程), AOP可以解決OOP由于切面需求導(dǎo)致單一職責(zé)被破壞的問題, 通過AOP可以不侵入OOP開發(fā), 非常方便地插入切面需求功能
直接使用Runtime方法交換開發(fā)的風(fēng)險有哪些
Runtime不光能夠進(jìn)行方法交換, 還能夠在運行時處理Objective-C特性相關(guān)(比如類、成員函數(shù)、繼承)的增刪改操作
四個典型的直接使用Runtime方法進(jìn)行方法交換的風(fēng)險
- 需要在+load方法中進(jìn)行交換,因為如果在其他時候進(jìn)行方法交換, 難以保證另外一個線程中不會同時調(diào)用被交換的方法, 從而導(dǎo)致程序不能按預(yù)期執(zhí)行
- 被交換的方法必須是當(dāng)前類的方法, 不能是父類的方法, 直接把父類的實現(xiàn)拷貝過來不會起作用, 父類的方法必須在調(diào)用的時候使用, 而不是方法交換時使用
- 交換的方法如果依賴了cmd, 那么交換后, 如果cmd發(fā)生了變化, 就會出現(xiàn)各種奇怪問題, 而且這些問題還很難排查. 特別是交換了系統(tǒng)方法, 你無法保證系統(tǒng)方法內(nèi)部是否依賴了cmd
- 方法交換命名沖突, 可能導(dǎo)致失敗