首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS中是否有用户不能更改的可使用时钟

iOS中是否有用户不能更改的可使用时钟
EN

Stack Overflow用户
提问于 2012-07-10 20:45:32
回答 6查看 10.5K关注 0票数 24

我正在尝试设计一个实时事件发生的系统,我想让它们与时钟同步。[NSDate date]通常是可以的,但是用户可以更改这一点并欺骗系统。我所需要的是一个时钟,我可以从(例如64位计数器)获取相对时间-我不需要绝对时间(或一天中的时间等)。

有没有这样的API我可以使用?

编辑:我还想补充说,这个时钟需要在应用程序的会话中持久化。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-10 21:08:37

如果您只需要一个时钟来测量单调递增的事件,那么您可以只获得当前系统的正常运行时间和clock_gettime(CLOCK_MONOTONIC)。如果重启设备有问题,只需保存上次使用的值,并在下次启动时使用上次保存的值作为偏移量。这里的问题可能是,如果他们真的关闭了设备,它将不会计入这段时间。但是如果你担心用户加速时间,他们不能这样做,只能减慢速度。

票数 8
EN

Stack Overflow用户

发布于 2012-07-10 21:05:50

iPhone上最好的单调递增数字是mach_absolute_time(),它是自上次重新启动以来的CPU计时计数。如果您出于任何原因想要在几秒钟内获得它,那么使用CACurrentMediaTime()获取它是最容易的。

使用它来创建一个“总是增量”是非常简单的。在第一次启动时,将当前值存储在您喜欢的任何位置。退出时,定期保存该值的偏移量。当您重新启动时,检查当前值;如果它小于您以前的基本值,请替换您的基本值(已重新启动)。

当然,所有这些都可以通过删除你的应用程序来清除,除非你在服务器上存储了一些东西。

请注意,这不能用作强大的安全措施。没有办法阻止授权用户伪造请求。因此,根据您所说的“欺骗系统”的意思,这可能不是一个可解决的问题。你所能做的最好的事情就是不断地勤奋地寻找黑客并处理他们。

票数 9
EN

Stack Overflow用户

发布于 2012-07-10 21:46:18

我在我们的应用程序中使用了这个

代码语言:javascript
运行
复制
+ (NSDate *) getAWSDate
{
    NSDate *today = nil; 
   NSString *dateString = nil;

    NSString *awsURL = @"http://s3.amazonaws.com";
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:awsURL]];  
    [request setHTTPMethod:@"HEAD"];  

    NSHTTPURLResponse *response;  
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];  

    if ([response respondsToSelector:@selector(allHeaderFields)]) {  
        dateString = [[response allHeaderFields] objectForKey:@"Date"];
        dateString = [dateString stringByReplacingOccurrencesOfString:@"GMT" withString:@"+0000"];
        NSDateFormatter *df = [[NSDateFormatter alloc] init];  
    df.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";
    df.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
    df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];  
    today = [df dateFromString:dateString];
    [df release];    
    }           
    return today;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11413616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档