hook:
Aspects
不知道一个方法什么时候执行的时候用得到
a).一个简洁高效的用于使iOS支持AOP面向切面编程的库.它可以帮助你在不改变一个类或类实例的代码的前提下,有效更改类的行为.比iOS传统的 AOP方法,更加简单高效.支持在方法执行的前/后或替代原方法执行.
b).Aspects 用于支持AOP(面向切面编程)模式,用于部分解决OOP(面向对象)模式无法解决的特定问题.具体指的是那些在多个方法有交叉,无法或很难被有效归类的操作,
c).你监测一个模态显示的控制器何时消失的示例,可以用得到.
d).Aspectes 会自动标记自己,所有很容易在调用栈中查看某个方法是否已经调用:
e).当应用于某个类时(使用类方法添加钩子),不能同时hook父类和子类的同一个方法;否则会引起循环调用问题.但是,当应用于某个类的示例时(使用实例方法添加钩子),不受此限制.
使用KVO时,最好在 aspect_hookSelector:
调用之后添加观察者;否则可能会引起崩溃.3.
调用方法:
performSelector:
[animal performSelector:@selector(animalFunc)]:(如果animalFunc没有接口,可以用这个调用).
原来的.h与.m文件的内容如下:
.h:(由此可见,没有接口,根本没有animalFunc方法)
import <Foundation/Foundation.h>
@interface Animal : NSObject
@end
.m:
import "Animal.h"
@implementation Animal
-
(void)animalFunc{
NSLog(@"animal_func");
}
@end
doesNotRecognizeSelector:(挂掉之前调用里面的方法):
-
(void)doesNotRecognizeSelector:(SEL)aSelector{
NSLog(@"-->%@",NSStringFromSelector(aSelector));
//...
// [];
[super doesNotRecognizeSelector:aSelector];
}
NSSelectorFromString(@"dealloc") 把一个字符串转变成一个方法.