应用程序中的自动注销计时器?

Auto Signout timer in app?

我要做的就是这个;我将有一个计时器,它会滴答作响,当 30 分钟结束时,我会自动注销用户。但如果与应用程序有任何交互,我会将计时器重置为 30 分钟。我知道该怎么做,但我确信有更好的方法来完成它。

我要做的是创建一个单例 class,它包含一个计时器并在计时器启动时发布通知。所以我在想的是,每当用户按下按钮、转到下一个屏幕等时,我都必须重置计时器。

我的问题是是否可以通过一段代码响应应用程序中的任何触摸?就像不知何故有一个 superclass 我可以添加它并且无论发生什么样的交互它总是会重置计时器?或者我是否需要将代码添加到用户将与应用程序交互的所有位置?

您可以试试这个,子类 UIApplication 并在实现中添加以下代码

@implementation MyApplication

- (instancetype)init {
    self = [super init];
    if (self) {
        [self reset];
    }
    return self;
}

- (void)reset {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(logout) object:nil];
    [self performSelector:@selector(logout) withObject:nil afterDelay:30*60];
}

- (void)sendEvent:(UIEvent *)event {
    [super sendEvent:event];

    [self reset];
    NSLog(@"event detected");
}

- (void)logout {
    NSLog(@"logout now");
}
@end

然后在main.m中改变实现方式

return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class]));

这里发生的事情是,- (void)sendEvent:(UIEvent *)event 方法将在每个用户 activity 之后被调用,然后我们在 30 分钟后注册一个执行选择器请求。一旦用户在 30 分钟内触摸屏幕,取消之前的请求并注册新的请求。