代码改变世界

通过runtime完美解决友盟统计 需要在每个controller添加代码的麻烦

2016-02-26 18:24  mynameissean  阅读(620)  评论(0)    收藏  举报

最近 项目在集成友盟统计功能,其中有一个 “页面访问路径统计” 需要在每个controller的viewWillAppear viewWillDisappear 方法中增加相关的代码  

 

如图 友盟集成文档截图

 

 

每个controller都要加这两个方法,,听着吓死个人,,项目中大小百十个controller   一个一个增加非常的不靠谱,  不说工作量大又枯燥无味,很难保证不会溜掉一部分的,后期新增内容也要时刻记住这个麻烦,,确实不爽。

怎么办呢? 第一个想法就是 抽取父类 在父类中重写 viewWillAppear viewWillDisappear  听起来蛮好的,,确实可以不用每个页面都加代码了,

新的问题来了  由于项目前期架构没有设计好,,几乎所有的controller都是继承自系统自带的controller, 那我要一个一个的给controller增加父类了,,还是每个controller都要修改,,一样不能解决 上面的问题,,

 

想来思去 想到了 runtime,对呀 用runtime 改变  viewWillAppear viewWillDisappear的实现 ,

利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。

大致思路是这样的, 

1,新搞一个controller的分类 

2,给分类创建两个函数 ,函数结构和viewWillAppear viewWillDisappear一样

3,通过runtime 对调系统controller自带的函数实现和自定义函数, ,然后再自定义函数中 调用系统函数 ,,

 

全部代码截图