iOS里有一個(gè)非常的好用切面編程的框架<Aspect>,功能我簡要概括下,基于runtime 中的黑魔法實(shí)現(xiàn),一共提供了兩個(gè)AOP方法,可以對(duì)某一個(gè)類或者實(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è)詞,感覺挺有意思,百度翻譯了一下是鉤子的意思,當(dāng)你如果還是一名學(xué)生的時(shí)候,word天吶,對(duì)說了這個(gè)詞語的人真是崇拜至極,心里默念著牛逼,其實(shí)這是一名程序員應(yīng)該懂的基本功.
其實(shí)鉤子來源于英文詞Hook,在windows系統(tǒng)中,一切皆消息,比如按了一下鍵盤,也是一個(gè)消息,Hook的意思是勾住,也就是在消息過去之前,可以先把消息勾住,不讓其傳遞,你可以優(yōu)先處理,也即這項(xiàng)技術(shù)就是提供了一個(gè)入口,能夠針對(duì)不同的消息或者API在執(zhí)行前,先執(zhí)行你的操作,你的操作也稱為「鉤子函數(shù)」,所以,有的時(shí)候程序員在討論的時(shí)候,也經(jīng)常會(huì)說,可以先hook住,在處理,也即在執(zhí)行某某操作之前,優(yōu)先處理一下
好啦,這就是Hook的思想和原理,希望以后在和猿交流的過程中,聽到這個(gè)詞的時(shí)候,你能夠自信的對(duì)程序員點(diǎn)點(diǎn)頭,祝裝逼成功哦~