hook:
Aspects
不知道一個方法什么時候執(zhí)行的時候用得到
a).一個簡潔高效的用于使iOS支持AOP面向切面編程的庫.它可以幫助你在不改變一個類或類實例的代碼的前提下,有效更改類的行為.比iOS傳統(tǒng)的 AOP方法,更加簡單高效.支持在方法執(zhí)行的前/后或替代原方法執(zhí)行.
b).Aspects 用于支持AOP(面向切面編程)模式,用于部分解決OOP(面向?qū)ο?模式無法解決的特定問題.具體指的是那些在多個方法有交叉,無法或很難被有效歸類的操作,
c).你監(jiān)測一個模態(tài)顯示的控制器何時消失的示例,可以用得到.
d).Aspectes 會自動標記自己,所有很容易在調(diào)用棧中查看某個方法是否已經(jīng)調(diào)用:
e).當應(yīng)用于某個類時(使用類方法添加鉤子),不能同時hook父類和子類的同一個方法;否則會引起循環(huán)調(diào)用問題.但是,當應(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)變成一個方法.