Objective-C 下的 AOP 編程

來源:互聯網
上載者:User

標籤:objective-c   aop   runtime   訊息轉寄   

Objective-C 下的 AOP 編程概念

在軟體業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,是函數式編程的一種衍生範型。通過先行編譯方式和運行期動態代理實現程式功能的統一維護的一種技術。主要的功能是:日誌記錄,效能統計,安全控制,交易處理,異常處理等等。主要的意圖是:將日誌記錄,效能統計,安全控制,交易處理,異常處理等代碼從商務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導商務邏輯的方法中,進而改變這些行為的時候不影響商務邏輯的代碼。

表現

在funa方法前後加執行代碼

[[XYAOP sharedInstance] interceptClass:[Test class] beforeExecutingSelector:@selector(funa) usingBlock:^(NSInvocation *invocation) {        NSLog(@"funa before");    }];[[XYAOP sharedInstance] interceptClass:[Test class] afterExecutingSelector:@selector(funa) usingBlock:^(NSInvocation *invocation) {        NSLog(@"funa after");    }];


當我們執行funa的時候呢,輸出如下結果

2014-10-28 17:31:01.435 testaop[7609:290860] funa before2014-10-28 17:31:01.436 testaop[7609:290860] funa run2014-10-28 17:31:01.436 testaop[7609:290860] funa after


實現原理

用Objective-C強大的runtime.

我們知道當給一個對象發送一個方法的時候, 如果當前類和父類都沒實現該方法的時候就會走轉寄流程

  • 動態方法解析 -> 快速訊息轉寄 -> 標準訊息轉寄

迷茫的同學請搜 "Objective-C 訊息轉寄".

瞭解了訊息轉寄,那麼我們aop的思路就來了,我們是先幹掉原本的方法funa,這樣當給對象發送方法的時候就會走轉寄流程,我們再hook了對象的快速訊息轉寄方法,把實現funa的對象指成我們的aop對象, 最後在aop對象的標準訊息轉寄裡執行before instead after方法.

具體的代碼歡迎大夥去github下載, 記得給咱點個star

https://github.com/uxyheaven/XYQuickDevelop

在代碼裡搜 XYAOP.h

相關一些方法介紹

介紹一些用到的runtime方法

// 給 cls 添加一個新方法BOOL class_addMethod (   Class cls,   SEL name,   IMP imp,   const char *types);// 替換 cls 裡的一個方法的實現IMP class_replaceMethod (   Class cls,   SEL name,   IMP imp,   const char *types);// 返回 cls 的指定方法Method class_getInstanceMethod (   Class cls,   SEL name);// 設定一個方法的實現IMP method_setImplementation (   Method m,   IMP imp);// 返回 cls 裡的 name 方法的實現IMP class_getMethodImplementation (   Class cls,   SEL name);


Objective-C 下的 AOP 編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.