iOS里有一個(gè)非常的好用切面編程的框架<Aspect>,功能我簡(jiǎn)要概括下交播,基于runtime 中的黑魔法實(shí)現(xiàn),一共提供了兩個(gè)AOP方法,可以對(duì)某一個(gè)類(lèi)或者實(shí)例的方法進(jìn)行攔截然后各種xxoo蝇裤。
/// Adds a block of code before/instead/after the current `selector` for a specific class.
+ (id<AspectToken>)aspect_hookSelector:(SEL)selector
withOptions:(AspectOptions)options
usingBlock:(id)block
error:(NSError **)error;
/// Adds a block of code before/instead/after the current `selector` for a specific instance.
- (id<AspectToken>)aspect_hookSelector:(SEL)selector
withOptions:(AspectOptions)options
usingBlock:(id)block
error:(NSError **)error;
然而在閱讀他的源碼從網(wǎng)上查閱資料時(shí)經(jīng)常會(huì)遇到hook這個(gè)詞廷支,感覺(jué)挺有意思频鉴,百度翻譯了一下是鉤子的意思,當(dāng)你如果還是一名學(xué)生的時(shí)候恋拍,word天吶垛孔,對(duì)說(shuō)了這個(gè)詞語(yǔ)的人真是崇拜至極,心里默念著牛逼施敢,其實(shí)這是一名程序員應(yīng)該懂的基本功.
其實(shí)鉤子來(lái)源于英文詞Hook周荐,在windows系統(tǒng)中,一切皆消息僵娃,比如按了一下鍵盤(pán)概作,也是一個(gè)消息,Hook的意思是勾住默怨,也就是在消息過(guò)去之前讯榕,可以先把消息勾住,不讓其傳遞匙睹,你可以?xún)?yōu)先處理愚屁,也即這項(xiàng)技術(shù)就是提供了一個(gè)入口,能夠針對(duì)不同的消息或者API在執(zhí)行前痕檬,先執(zhí)行你的操作霎槐,你的操作也稱(chēng)為「鉤子函數(shù)」,所以梦谜,有的時(shí)候程序員在討論的時(shí)候栽燕,也經(jīng)常會(huì)說(shuō),可以先hook住改淑,在處理碍岔,也即在執(zhí)行某某操作之前,優(yōu)先處理一下
好啦朵夏,這就是Hook的思想和原理蔼啦,希望以后在和猿交流的過(guò)程中,聽(tīng)到這個(gè)詞的時(shí)候仰猖,你能夠自信的對(duì)程序員點(diǎn)點(diǎn)頭捏肢,祝裝逼成功哦~