iphone - 使用 GCD 创建循环

标签 iphone objective-c objective-c-blocks grand-central-dispatch

这就是我得到的:

  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1*NSEC_PER_SEC), dispatch_get_current_queue(), ^{
                bool ready = some_function();
                if( ready ) {                    
                   do_smth_here()
                } else {
                   //invoke this block one more time after 0.1 sec
                }
            });

问题是如何获取当前 block 的引用?

最佳答案

我通常会声明一个我可以调用的实例方法,而不是跳过上面显示的步骤,在内部处理必要的重新触发。这样,任何给定的 block 都是一次性的,但重新触发会创建一个新 block 。

只要 block 的创建不是非常昂贵——如果状态来自封装实例方法的任何东西就不会如此——它就足够高效并且简单得多。

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

您可以根据需要对其进行重组。如果您想防止同时重新触发等,您可以轻松添加一个 BOOL 实例变量......

这也提供了一个方便的取消钩子(Hook);只需向实例添加一个 BOOL,指示下一次调用是否真的应该做任何事情并重新安排。

关于iphone - 使用 GCD 创建循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998476/

相关文章:

ios - 带约束的移动 View

objective-c - Swift 只读外部,读写内部属性

ios - 如何为方法编写和传递完成 block 参数?

objective-c - 为什么这个 ObjC block 在释放时不释放它捕获的引用?包括失败的单元测试

iphone - 为什么我不能让相机显示?

iphone - dispatch_async 是否等到上一行完成后再继续?

iphone - 检测 UIBarButtonItem 中的触摸或按下

iphone - 使用 strftime 将 NSDate 转换为字符串

objective-c - 在另一个类的应用程序委托(delegate)中使用 NSMutableArray

swift - 以下 block 属性的 swift 属性 block 声明是什么?