我不認爲你需要NSTimer。 NSTimer用於在一段時間後觸發回調。如果您正試圖從一個對象被創建以跟蹤的時間量,這樣做:
在作出對象主動:
object.createdAt = [ NSDate date ] ;
要確定長期目標一直活躍,這樣做:
NSTimeInterval numberOfSecondsSinceCreation = [ [ NSDate date ] timeIntervalSinceDate:object.createdAt ] ;
可暫停執行
我寫了一個類別,你可以添加到你的項目,你可以用它來TRAC對象的k'活動時間'。
@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
如果不是絕對必要的話,您不應該創建新線程,因爲它需要大量OS操作。 Apple建議使用Grand Central Dispatch進行多線程處理。雖然在這裏你根本不需要定時器(如下面的人已經回答) – guitarflow 2012-04-16 19:04:18