Objective-C 带有 block 的 NSTimer
2017-03-28 本文已影响197人
张嘉夫
有的时候 NSTimer
的调度任务比较复杂,需要在调度方法中执行异步操作,并且在异步操作中需要回调原方法中的回调参数。
Swift 3 介绍了一个带有 block 回调的新方法:
Timer(timeInterval: gameInterval, repeats: false) { _ in
print("herp derp")
}
Objective-C 也有对应的版本:
[NSTimer scheduledTimerWithTimeInterval:gameInterval repeats:NO block:^(NSTimer *timer) {
NSLog(@"herp derp");
}];
但这个方法需要 target 系统版本大于等于 iOS10, macOS 12, tvOS 10, watchOS 3。
如果项目需要支持以上系统以下的版本的时候,需要怎么做呢?
我们可以用一种很聪明的方法来实现:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.7
target:[NSBlockOperation blockOperationWithBlock:^{ /* do this! */ }]
selector:@selector(main)
userInfo:nil
repeats:NO
];
完美!