通过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自带的函数实现和自定义函数, ,然后再自定义函数中 调用系统函数 ,,
全部代码截图

浙公网安备 33010602011771号