iOS通过Runtime实现友盟统计的实例代码

发布时间 - 2026-01-11 02:03:38    点击率:

在友盟官网可以看到相应的步骤,申请appkey,导入SDK,然后在AppDelegate里面写入相应的代码,下面就是关键的代码:

实现页面的统计需要在每个UIViewController中配对调用如下方法:

  - (void)viewWillAppear:(BOOL)animated
  {
    [super viewWillAppear:animated];
    [MobClick beginLogPageView:@"PageOne"];//("PageOne"为页面名称,可自定义)
  }
- (void)viewWillDisappear:(BOOL)animated 
  {
    [super viewWillDisappear:animated];
    [MobClick endLogPageView:@"PageOne"];
  }

几年之前做过这个,那时候才刚开始做iOS,就按照这个文档在每一个UIViewController里面写了这个方法,现在看来真是太low了。

这次又做这个友盟统计,就想起来用runtime解决这个问题。

在工程中创建一个UIViewController的Category,然后通过Runtime动态添加两个方法,分别替代viewWillAppear和viewWillDisappear方法。这样就不需要在每一个 UIViewController写这段代码了。

新建一个分类:

UIViewController+Statistics.h

//
// UIViewController+Statistics.h
// TongYuanHospital
//
// Created by ZSP on 2017/6/16.
// Copyright © 2017年 ZSP. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIViewController (Statistics)

@end

UIViewController+Statistics.m

//
// UIViewController+Statistics.m
// TongYuanHospital
//
// Created by ZSP on 2017/6/16.
// Copyright © 2017年 ZSP. All rights reserved.
//

#import "UIViewController+Statistics.h"

@implementation UIViewController (Statistics)


+ (void)load {

  //原本的viewWillApper方法
  Method viewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:));

  //需要替换成能够输入日志的viewWillAppear
  Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:));


  //原本的viewWillDisappear方法
  Method viewWillDisappear = class_getInstanceMethod(self, @selector(viewWillDisappear:));
  //需要替换成能够输入日志的viewWillDisappear
  Method logviewWillDisappear = class_getInstanceMethod(self, @selector(logviewWillDisappear:));

  //两方法进行交换
  method_exchangeImplementations(viewWillAppear, logViewWillAppear);
  method_exchangeImplementations(viewWillDisappear, logviewWillDisappear);

}
-(void)logViewWillAppear:(BOOL)animated
{
  [self logViewWillAppear:animated];  
  NSString *selfClass = NSStringFromClass([self class]);
  [MobClick beginLogPageView:selfClass];
  //当然这里也可以使用self.title作为页面的名称,这样在友盟后台查看的时候更加方便些
  //[MobClick endLogPageView:self.title];  
}

-(void)logviewWillDisappear:(BOOL)animated
{
  [self logviewWillDisappear:animated];
  NSString *selfClass = NSStringFromClass([self class]);
  [MobClick endLogPageView:selfClass];
}


@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# iOS  # 友盟统计  # iOS实现友盟统计  # 总结iOS中runtime的使用  # iOS runtime forwardInvocation详解及整理  # iOS使用runtime修改文本框(TextField)的占位文字颜色  # iOS runtime动态添加方法示例详解  # IOS Object-C 中Runtime详解及实例代码  # IOS 中runtime使用方法整理  # iOS利用Runtime实现友盟页面数据统计的功能示例  # iOS runtime知识梳理  # iOS中Runtime的几种基本用法记录  # iOS Runtime详解(新手也看得懂)  # 替换成  # 就不  # 几年  # 这段  # 可以看到  # 做过  # 那时候  # 写了  # 自定义  # 在每一个  # 可以使用  # 就想  # 真是太  # 创建一个  # 官网  # 解决这个问题  # 大家多多  # 新建一个  # 来用  # 文档 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何使用模型观察者?(Observer代码示例)  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何使用Collections进行数据处理?(实用方法示例)  JS碰撞运动实现方法详解  制作企业网站建设方案,怎样建设一个公司网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Python面向对象测试方法_mock解析【教程】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  PHP正则匹配日期和时间(时间戳转换)的实例代码  手机网站制作与建设方案,手机网站如何建设?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Android中AutoCompleteTextView自动提示  如何在橙子建站上传落地页?操作指南详解  Laravel如何处理异常和错误?(Handler示例)  高防服务器租用指南:配置选择与快速部署攻略  Laravel观察者模式如何使用_Laravel Model Observer配置  如何快速上传建站程序避免常见错误?  用v-html解决Vue.js渲染中html标签不被解析的问题  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  ,网页ppt怎么弄成自己的ppt?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  使用Dockerfile构建java web环境  米侠浏览器网页背景异常怎么办 米侠显示修复  焦点电影公司作品,电影焦点结局是什么?  如何用y主机助手快速搭建网站?  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何快速生成凡客建站的专业级图册?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何快速生成高效建站系统源代码?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何优化应用性能?(缓存和优化命令)  创业网站制作流程,创业网站可靠吗?  如何自定义建站之星网站的导航菜单样式?  Swift中循环语句中的转移语句 break 和 continue  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何实现建站之星域名转发设置?  详解MySQL数据库的安装与密码配置  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  JS实现鼠标移上去显示图片或微信二维码  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  JavaScript常见的五种数组去重的方式  nginx修改上传文件大小限制的方法  常州企业网站制作公司,全国继续教育网怎么登录?