面向切面程式設計之瘋狂的 Aspects

千客發表於2016-04-07

什麼是面向切面程式設計

Aspect Oriented Programming(AOP),面向切面程式設計,是一個比較熱門的話題。AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。

主要用來處理一些具有橫切性質的系統性服務,如日誌記錄、許可權管理、快取、物件池管理等,AOP 已經成為一種非常常用的解決方案。

比如說我們在實現許可權驗證的時候,需要在每個業務的執行前對許可權進行相應的判斷,從而導致了大量的重複程式碼,不利於模組的複用。AOP則通過將每個業務的公共行為進行抽離,封裝成一個可複用的模組,這個模組就叫做『切面』。

什麼是Aspects

Aspects是一個輕量級的面向切面程式設計的庫。它主要提供了三個切入點:before(在原始的方法前執行)/instead(替換原始的方法執行)/after(在原始的方法後執行,預設),通過Runtime訊息轉發實現Hook,同時這也會帶來一定的負擔,所以它不適合迴圈多次呼叫的方法。

Aspects擴充套件了NSObject類,對外提供如下兩個方法:

Aspects初始化工作核心部分的解析

aspect_add方法:

HookClass過程:

HookSelector過程

Aspects執行工作核心部分的解析

當我們正式向某個接受者傳送訊息的時候,會進行訊息轉發,而之前HookClass的過程當中我們已經對forwardInvocation的實現替換為了__ASPECTS_ARE_BEING_CALLED__

執行block的程式碼

流程圖:


流程圖

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

面向切面程式設計之瘋狂的 Aspects 面向切面程式設計之瘋狂的 Aspects

相關文章