• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > activity生命周期[iOS]监视某个VC生命周期函数

activity生命周期[iOS]监视某个VC生命周期函数

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了activity生命周期,activity生命周期图,安卓activity生命周期,activity生命周期详解,activity生命周期方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:activity生命周期 [iOS] 监视某个VC生命周期函数
描述:

RT 需求是我要创建一个桥接类。
我需要对一些VC的生命周期做一些监控,比如VC的viewWillAppear等生命周期函数执行完,执行我的方法。

目前已尝试过 协议 hook 但都不够实现我的需求。
协议 并不能强制要求所有这些VC实现这些生命周期方法。毕竟多人开发,如果有人疏漏,桥接功能出错。

hook 第一不够安全,和category重写一样,一个容易有坑,一个是还是无法强制要求这些写VC的人,会实现生命周期这些函数。

所以求助大神们有什么推荐、?


解决方案1:

谢谢你的回答

但是为什么是替换了多次呢?代码如下

@implementation HookTest
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

+(void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        Method viewDidAppear=class_getInstanceMethod([HookTest class], @selector(viewDidAppear:));
        
        _IMP viewDidAppear_IMP=(_IMP)method_getImplementation(viewDidAppear);
        method_setImplementation(viewDidAppear, imp_implementationWithBlock(^(id target,SEL action){
            viewDidAppear_IMP(target,@selector(viewDidAppear:));
            NSLog(@"%@ did load",target);
//            [target dosomething];
        }));
    });
    
}

log 如下

解决方案2:

利用method swizzling,example:

#import "UIViewController+WJAdd.h"
#import <objc/runtime.h>

typedef void (* _IMP)(id,SEL,...);

@implementation UIViewController (WJAdd)

+(void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method viewDidLoad=class_getInstanceMethod(self, @selector(viewDidLoad));

        _IMP viewDidLoad_IMP=(_IMP)method_getImplementation(viewDidLoad);
        method_setImplementation(viewDidLoad, imp_implementationWithBlock(^(id target,SEL action){
            viewDidLoad_IMP(target,@selector(viewDidLoad));
            NSLog(@"%@ did load",target);
            [target dosomething];
        }));
    });

}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • activity生命周期[iOS]监视某个VC生命周期函数

相关文章

  • 2017-06-05 从零开始制作2048游戏
  • 2017-06-05 iOS远程推送ios客户端推送注册失败
  • 2017-06-05 xcode使用CocoaPod打包framework时,如果在h文件中引入了其他第三方pod,打包时需要修改什么
  • 2017-06-05 应用上传appStore被拒,给了三个崩溃日志,在上传时没有生成dysm文件,怎么看这种崩溃日志?
  • 2017-06-05 在刷新tableView的时候遇section加载个数的问题,求大神解答。
  • 2017-06-05 适配iPhone6和plus应该把原来的内容同比放大还是只有宽度放大,高度和字号等等不变?
  • 2017-06-05 如何在windows10上面虚拟安装黑苹果,做好能带上下载资源?
  • 2017-06-05 认识物体和图形如何让物体B和C冲离物体A呢?
  • 2017-06-05 支付验证签名支付失败?——微信支付的app支付
  • 2017-06-05 iOS基础控件iOS--关于使用NSTimer实现滚动条

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • tableView中只不显示数据源的前几个,稍微向下拖拽就会显示完全,什么原因?
    • swiftUItableViewCell怎么自定义添加控件、设置样式
    • 数学计算器在线计算UItextview计算高度
    • 如何解决ReactNative中使用Linking调用iOS系统电话功能出现错误?
    • nod32id获取器weexios如何获取设备id如UDID
    • 自定义了一个导航控制器当父类用,然后视图控制器上定义当barbuttonitem就看不见了。
    • iOS开发,UI设计师给的750的设计图,如何适配各种尺寸的屏幕?
    • 手机客户端开发移动端开发,关于项目中图片大小
    • 更新了gem后怎么输入都是这个错误
    • (swift)怎么实现在IOS应用软件更新升级后,原来软件中的记录还能再导回新软件,旧软件中文件保存在哪不会被覆盖

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有