iOS给所有页面添加统计功能,偷懒的方式
2017-09-01 本文已影响116人
踏云小子
咋整
找到一个只加载一次的方法+(void)load
将viewDidLoad
改成自定义的方法xya_viewDidLoad
+ (void)load{
[super load];
Method fromMethod = class_getInstanceMethod([self class], @selector(viewDidLoad));
Method toMethod = class_getInstanceMethod([self class], @selector(xya_viewDidLoad));
//判断是否已经添加了我们自定义的方法,若没有,就去添加
if (!class_addMethod([self class], @selector(viewDidLoad), method_getImplementation(toMethod), method_getTypeEncoding(toMethod))) {
method_exchangeImplementations(fromMethod, toMethod);
}
}
在自定义的xya_viewDidLoad
设置统计功能
- (void)xya_viewDidLoad{
NSString *str = [NSString stringWithFormat:@"%@", self.class];
// 我们在这里加一个判断,将系统的UIViewController的对象剔除掉
if(![str containsString:@"UI"]){
...你的统计代码
}
[self xya_viewDidLoad];
}
附录
-
IMP是”implementation”的缩写,它是objetive-C 方法(method)实现代码块的地址,可像C函数一样直接调用。通常情况下我们是通过[object method:parameter]或objc_msgSend()的方式向对象发送消息,然后Objective-C运行时(Objective-C runtime)寻找匹配此消息的IMP,然后调用它;但有些时候我们希望获取到IMP进行直接调用。
-
根据SEL调用一个方法
SEL s1 = @selector(test1);
SEL s2= NSSelectorFromString(@"test1");
//转化SEL为NSString:
// NSString *str = NSStringFromSelector(@selector(test));
//根据SEL来调用一个方法:
[self performSelector:s2];
NSLog(@"");