我正在创建并解雇NSTimer:
ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:YES];
[ncTimer fire];
Run Code Online (Sandbox Code Playgroud)
和
- (void)handleTimer:(NSTimer *)chkTimer {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我保留我的计时器:
@property (nonatomic, retain) NSTimer *ncTimer;
Run Code Online (Sandbox Code Playgroud)
由于某种原因,计时器不重复.它只发射一次而不是再发射一次.
Wal*_*ter 38
该-fire:方法手动触发一次.要启动和重复计时器,您必须使用它将其添加到runloop[[NSRunLoop currentRunLoop] addTimer: forMode:]
Vai*_*ran 23
得到它了
添加计时器mainRunLoop使其正常工作
干得好:
目标C:
self.ncTimer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
迅速:
var ncTimer = NSTimer(timeInterval: 2.0, target: self, selector: Selector("handleTimer"), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(ncTimer, forMode: NSDefaultRunLoopMode)
Run Code Online (Sandbox Code Playgroud)
您不能只将分配给已作为属性放入标题的计时器.这应该工作:
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];Run Code Online (Sandbox Code Playgroud)
另外:fire方法触发定时器,不在循环中.如果计时器不重复,则无效.在说明火线之后,添加:
BOOL timerState = [ncTimer isValid];
NSLog(@"Timer Validity is: %@", timerState?@"YES":@"NO");
Run Code Online (Sandbox Code Playgroud)
您还可以在此块中复制代码,该代码在主线程中插入Timer的创建.
因此代码将保留:
dispatch_async(dispatch_get_main_queue(), ^{
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15665 次 |
| 最近记录: |