为什么NSTimer触发的操作不能由块指定?

时间:2014-05-22 17:43:18

标签: ios selector objective-c-blocks nstimer nsinvocation

创建计时器时,只有以下选项:

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds invocation:(NSInvocation *)invocation repeats:(BOOL)repeats;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats;

正如您所看到的,没有工厂方法可以创建一个带有块作为其执行操作的计时器。

这是为什么?或者我错过了什么?

2 个答案:

答案 0 :(得分:4)

NSTimer在块之前,尚未更新以使用它们。如果你想使用一个块(这是正确的),使用GCD调度源,即dispatch_source_set_timer和相关函数。

在ARC下,请注意保留周期(尽管你也不得不提防那些使用NSTimer的人)。

答案 1 :(得分:3)

如果您真的想要,可以通过创建类别传递选择器的块。见this question。您也可以使用此github project执行此操作。