Aspects的簡介與hook

hook:

Aspects
不知道一個方法什么時候執(zhí)行的時候用得到

a).一個簡潔高效的用于使iOS支持AOP面向切面編程的庫.它可以幫助你在不改變一個類或類實例的代碼的前提下,有效更改類的行為.比iOS傳統(tǒng)的 AOP方法,更加簡單高效.支持在方法執(zhí)行的前/后或替代原方法執(zhí)行.

b).Aspects 用于支持AOP(面向切面編程)模式,用于部分解決OOP(面向?qū)ο?模式無法解決的特定問題.具體指的是那些在多個方法有交叉,無法或很難被有效歸類的操作,

c).你監(jiān)測一個模態(tài)顯示的控制器何時消失的示例,可以用得到.
d).Aspectes 會自動標(biāo)記自己,所有很容易在調(diào)用棧中查看某個方法是否已經(jīng)調(diào)用:
e).當(dāng)應(yīng)用于某個類時(使用類方法添加鉤子),不能同時hook父類和子類的同一個方法;否則會引起循環(huán)調(diào)用問題.但是,當(dāng)應(yīng)用于某個類的示例時(使用實例方法添加鉤子),不受此限制.
使用KVO時,最好在 aspect_hookSelector:
調(diào)用之后添加觀察者;否則可能會引起崩潰.3.
調(diào)用方法:
performSelector:
[animal performSelector:@selector(animalFunc)]:(如果animalFunc沒有接口,可以用這個調(diào)用).
原來的.h與.m文件的內(nèi)容如下:
.h:(由此可見,沒有接口,根本沒有animalFunc方法)

import <Foundation/Foundation.h>

@interface Animal : NSObject

@end

.m:

import "Animal.h"

@implementation Animal

  • (void)animalFunc{

    NSLog(@"animal_func");
    }
    @end

doesNotRecognizeSelector:(掛掉之前調(diào)用里面的方法):

  • (void)doesNotRecognizeSelector:(SEL)aSelector{

    NSLog(@"-->%@",NSStringFromSelector(aSelector));
    //...
    // [];
    [super doesNotRecognizeSelector:aSelector];
    }

NSSelectorFromString(@"dealloc") 把一個字符串轉(zhuǎn)變成一個方法.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,051評論 0 9
  • 前言 如何把這個世界變得美好?把你自己變得更美好 我們這篇博客繼續(xù)來介紹Runtime在開發(fā)中的實際應(yīng)用,通過開源...
    Dely閱讀 2,287評論 4 16
  • 前言 在“Runtime病院”住院的后兩天,分析了一下AOP的實現(xiàn)原理?!俺鲈骸焙螅l(fā)現(xiàn)Aspect庫還沒有詳細(xì)分...
    一縷殤流化隱半邊冰霜閱讀 18,807評論 34 165
  • 我們常常會聽說 Objective-C 是一門動態(tài)語言,那么這個「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,333評論 0 7
  • 聽著過去的歌。原來每一個人都會改變,因為我們都害怕被淹沒。 近期發(fā)現(xiàn),我好像越來越難一個人完全地安靜下來去想問題,...
    一閃一閃張晶晶閱讀 318評論 0 0

友情鏈接更多精彩內(nèi)容