我已经设置了一个块以在不同的队列上运行,并在延迟后调用另一个方法:

piemanQ = dispatch_queue_create(PIEMAN_QUEUE_NAME, NULL);
dispatch_async(piemanQ, ^{
    [self performSelector:@selector(sendReadyToPieman) withObject:nil afterDelay:1.0];
});

我希望一秒钟后@selector(sendReadyToPieman)触发,但是什么也没发生。我已经阅读了performSelector:withObject:afterDelay:上的doco,它谈到了通过计时器在当前队列上添加的方法。我检查了当前队列的运行循环模式,但返回nil。

我确定我之前已经做过这种代码,但是我已经在两个不同的地方尝试过了,在两种情况下都没有运行。但是,如果我将其替换为dispatch_after(...),则一切正常。

谁能给我一些启示?

最佳答案

您应该将操作放到NSOperationQueue上:

NSOperationQueue *piemanQ = [[NSOperationQueue alloc] init];
piemanQ.name = @"some name";
[piemanQ addOperationWithBlock:^{
    [self performSelector:@selector(sendReadyToPieman) withObject:nil afterDelay:1.0];
}];

这是自动异步的。最好使用Objective-C解决方案,而不是使用C解决方案来解决问题。

关于ios - performSelector:withObject:afterDelay:不排队选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12351350/

10-12 05:40