dispatch_after recursion vs NSTimer scheduledtimerwithtimeinterval

Gon*_*Gon 2 recursion nstimer dispatch grand-central-dispatch ios

我读了一段代码,它每秒都会检查数据并更新UI.这听起来像我们通常使用的NSTimer scheduledtimerwithtimeinterval.但是这个代码是通过递归调用实现的dispatch_after:

- (void) retriggerMethod {
    ... do stuff here, assuming you want to do it on first invocation ...
    dispatch_after( ..., ^{
        [self retriggerMethod];
    });
}
Run Code Online (Sandbox Code Playgroud)

dispatch_after递归NSTimer scheduledtimerwithtimeinterval之间的区别是什么?使用前者时是否存在潜在风险?我想当你使用它时,只要不结束这种递归,调用栈就会增长.

小智 8

的NSTimer:

1. Need a NSRunloop.
2. Can repeat.
3. Can be invalid anytime if u want to cancel.
4. Can only run with delegate.
5. High level API.
Run Code Online (Sandbox Code Playgroud)

dispatch_after:

1. Can be run everywhere that u want with dispatch_queue.
2. Can't repeat by itself.
3. Can't be cancel.
4. It run as block.
5. GCD.
Run Code Online (Sandbox Code Playgroud)