iphone-时间(隐藏应用)和时间(出现应用)之间的时差。

| 如何从appEnterBackground获取日期并从appEnterForeground获取日期,然后在标签中显示差异。 到目前为止,这是我的代码。
**.h**
    NSTimeInterval appEnteredBackground;
    NSTimeInterval appEnteredForeground;
    NSTimeInterval difference;  

**.m**

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    appEnteredBackground = [NSDate timeIntervalSinceReferenceDate];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    appEnteredForeground = [NSDate timeIntervalSinceReferenceDate];
    difference = appEnteredForeground - appEnteredBackground;

    NSLog(@\"Duration is %@\",[NSDate dateWithTimeIntervalSinceReferenceDate: difference]);
    NSLog(@\"Duration is %@\", [NSString stringWithFormat:@\"%f\", difference]);

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    NSString *time = [NSString stringWithFormat:@\"%f\", difference];   **//ERROR HERE (variable not used)**

    [dateFormatter release];
}
任何帮助都太棒了     
已邀请:
        我认为您在这里没有错误。您正确地计算了时差,然后使用“ \ description \”构建字符串,但不要使用它。 若要查看它们是否正常工作,请在方法结束前尝试以下操作:
NSLog(@\"Computed time was: %@\", time);
您应该关心那个
time
变量,因为您没有积极使用它。     
        要测量此类事件(或事件差异),您需要分辨率小于一秒的东西。有一个“ c”接口来获取机器时间,这是处理器内部可以自由运行的“滴答声”。 使用此StopWatch类,您可以获得非常好的计时(毫秒,微秒,如果您相信的话)。 秒表
#import <Foundation/Foundation.h>


@interface StopWatch : NSObject 
{
    uint64_t _start;
    uint64_t _stop;
    uint64_t _elapsed;
}

-(void) Start;
-(void) Stop;
-(void) StopWithContext:(NSString*) context;
-(double) seconds;
-(NSString*) description;
+(StopWatch*) stopWatch;
-(StopWatch*) init;
@end
秒表
#import \"StopWatch.h\"
#include <mach/mach_time.h>

@implementation StopWatch

-(void) Start
{
    _stop = 0;
    _elapsed = 0;
    _start = mach_absolute_time();
}
-(void) Stop
{
    _stop = mach_absolute_time();   
    if(_stop > _start)
    {
        _elapsed = _stop - _start;
    }
    else 
    {
        _elapsed = 0;
    }
    _start = mach_absolute_time();
}

-(void) StopWithContext:(NSString*) context
{
    _stop = mach_absolute_time();   
    if(_stop > _start)
    {
        _elapsed = _stop - _start;
    }
    else 
    {
        _elapsed = 0;
    }
    NSLog([NSString stringWithFormat:@\"[%@] Stopped at %f\",context,[self seconds]]);

    _start = mach_absolute_time();
}


-(double) seconds
{
    if(_elapsed > 0)
    {
        uint64_t elapsedTimeNano = 0;

        mach_timebase_info_data_t timeBaseInfo;
        mach_timebase_info(&timeBaseInfo);
        elapsedTimeNano = _elapsed * timeBaseInfo.numer / timeBaseInfo.denom;
        double elapsedSeconds = elapsedTimeNano * 1.0E-9;
        return elapsedSeconds;
    }
    return 0.0;
}
-(NSString*) description
{
    return [NSString stringWithFormat:@\"%f secs.\",[self seconds]];
}
+(StopWatch*) stopWatch
{
    StopWatch* obj = [[[StopWatch alloc] init] autorelease];
    return obj;
}
-(StopWatch*) init
{
    [super   init];
    return self;
}

@end
该类有一个静态的
stopWatch
方法,该方法返回一个自动释放的对象。 调用
start
后,请使用
seconds
方法获取经过的时间。再次呼叫
start
重新启动。或按ѭ9停止。致电
stop
之后,您仍然可以随时读取时间(致电call7ѭ)。 函数中的示例(执行的计时调用)
-(void)SomeFunc
{
   StopWatch* stopWatch = [StopWatch stopWatch];
   [stopWatch Start];

   ... do stuff

   [stopWatch StopWithContext:[NSString stringWithFormat:@\"Created %d Records\",[records count]]];
}
    

要回复问题请先登录注册