これには NSTimer は必要ないと思います。NSTimer は、一定時間後にコールバックを起動するために使用されます。オブジェクトが作成されてからの経過時間を追跡する場合は、次のようにします。
オブジェクトをアクティブにすると:
object.createdAt = [ NSDate date ] ;
オブジェクトがアクティブであった時間を確認するには、次のようにします。
NSTimeInterval numberOfSecondsSinceCreation = [ [ NSDate date ] timeIntervalSinceDate:object.createdAt ] ;
一時停止可能な実装
オブジェクトの「アクティブ時間」を追跡するために使用できるプロジェクトに追加できるカテゴリを作成しました。
@interface NSObject (Timeable)
@property ( nonatomic ) NSTimeInterval totalActiveTime ;
@property ( nonatomic, retain ) NSDate * lastStartTime ;
@end
@implementation NSObject (Timeable)
-(void)startTimer
{
self.lastStartTime = [ NSDate date ] ;
}
-(void)pauseTimer
{
self.totalActiveTime = self.totalActiveTime + [[ NSDate date ] timeIntervalSinceDate:self.lastStartTime ] ;
}
-(NSDate*)lastStartTime
{
return objc_getAssociatedObject( self, @"lastStartTime" ) ;
}
-(void)setLastStartTime:(NSDate*)date
{
return objc_setAssociatedObject( self, @"lastStartTime", date, OBJC_ASSOCIATION_RETAIN_NONATOMIC ) ;
}
-(NSTimeInterval)totalActiveTime
{
NSNumber * number = objc_getAssociatedObject( self, @"totalActiveTime" ) ;
return number ? [ number doubleValue ] : 0.0 ;
}
-(void)setTotalActiveTime:(NSTimeInterval)time
{
objc_setAssociatedObject( self, @"totalActiveTime", [ NSNumber numberWithDouble:time ], OBJC_ASSOCIATION_RETAIN_NONATOMIC ) ;
}
@end