当前位置: 首页 > news >正文

iOS实现程序长时间未操作退出

大部分银行客户端都有这样的需求,在用户一定时间内未操作,即认定为token失效,但未操作是任何判定的呢?我的想法是用户未进行任何touch时间,原理就是监听runloop事件。我们需要进行的操作是创建一个UIApplication的子类,废话不多说,上代码

// 定义未操作通知的时间,也可以从服务器上获取。
#define kApplicationTimeoutInMinutes 30

@interface NTApplication : UIApplication {
    NSTimer *_myTimer;
}

- (void)resetTimer;

@end
@implementation NTApplication

- (void)sendEvent:(UIEvent *)event {
    
    [super sendEvent:event];
    
    if (!_myTimer) {
        
        [self resetTimer];
        
    }
    NSSet *allTouches = [event allTouches];
    
    if ([allTouches count] > 0) {
        
        UITouchPhase phase = ((UITouch *)
                             
                             [allTouches anyObject]).phase;
        
        if (phase ==UITouchPhaseBegan) {
            [self resetTimer];
        }
        
    }
    [[NSNotificationCenter defaultCenter] postNotificationName:kUserBreakFreeNotification object:nil];
}

//重置时钟

- (void)resetTimer {
    
    if (_myTimer) {
        
        [_myTimer invalidate];
        
    }
    
    int timeout = kApplicationTimeoutInMinutes;//超时时间,我这里设置为30s
    
    _myTimer = [NSTimer scheduledTimerWithTimeInterval:timeout target:self selector:@selector(freeTimerNotificate:) userInfo:nil repeats:NO];
    
}

//当达到超时时间,发送 kApplicationTimeoutInMinutes通知

- (void)freeTimerNotificate:(NSNotification *)notification {
    //在想要获得通知的地方注册这个通知就行了
    [[NSNotificationCenter defaultCenter] postNotificationName:kUserEnterFreeTimeoutNotification object:nil];
}

@end

还有最重要的一部,将NTApplication与当前的AppDelegate关联起来,在main.m中更改

 

#import "NTApplication.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, NSStringFromClass([NTApplication class]), NSStringFromClass([AppDelegate class]));
    }
}

 

UIApplicationMain原来的第三个参数是nil,更改成NSStringFromClass([NTApplication class])

 

转载于:https://www.cnblogs.com/xiaobaizhu/p/7344585.html

相关文章:

  • 7类食品让你越吃越聪明
  • ATT 现场测试白盒交换机
  • 在ASP.NET中使用SubSonic时,要进行的相关设置
  • 解除无法执行“REGEDIT”的限制
  • spring test
  • go语言指针符号的*和
  • Oracle 中使用 ObjectDataSource 读取强类型 DataSet 数据集
  • 【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)
  • 总结了一些常见的排序算法,面试必备啊!转载
  • Github上10 个最流行的数据可视化项目
  • 高中数学与初中数学的接轨点
  • 添加IIS出错,提示缺少CONVLOG.exe文件
  • SWIFT学习笔记05
  • 关于DEVMODE的数据结构--显示设备的属性(转)
  • 8-16 藏尾诗
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Docker下部署自己的LNMP工作环境
  • Gradle 5.0 正式版发布
  • HTML5新特性总结
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js对象的深浅拷贝
  • python_bomb----数据类型总结
  • python3 使用 asyncio 代替线程
  • React的组件模式
  • 动态魔术使用DBMS_SQL
  • 工程优化暨babel升级小记
  • 关于 Cirru Editor 存储格式
  • 基于游标的分页接口实现
  • 记录:CentOS7.2配置LNMP环境记录
  • 问题之ssh中Host key verification failed的解决
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 移动端 h5开发相关内容总结(三)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​Python 3 新特性:类型注解
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (9)目标检测_SSD的原理
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转) Android中ViewStub组件使用
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET MVC 验证码
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net面试题4
  • .net中应用SQL缓存(实例使用)
  • .pyc文件是什么?
  • .so文件(linux系统)
  • /var/spool/postfix/maildrop 下有大量文件
  • @Pointcut 使用
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku