【发布时间】:2012-05-13 12:01:49
【问题描述】:
我正在尝试这两种方法:
dispatch_async(dispatch_get_main_queue(),^{
[self handleClickAsync];
});
和
[self performSelector:@selector(handleClickAsync) withObject:nil afterDelay:0];
响应按钮按下。
第二个允许UIButton 像人们期望的那样突出显示并在下一个运行循环中执行handleClickAsync(我想:肯定是“稍后”)。第一个不允许UIButton实例亮起,直到操作完全完成。
使用 GCD 执行此操作的正确方法是什么,或者performSelector 仍然是唯一的方法?
【问题讨论】:
-
大概你是从另一个调度队列中调用它的?如果是这样,它将在队列中按顺序运行所有命令。您是否可以在开始操作之前调用此方法?
-
我不确定。我直接从
touchesEnded调用它,它在UIView子类(或本例中的UIButton)上免费提供。 -
我不知道你为什么要在 dispatch_async 和 runloop 的运行之间建立关联......
-
@Paul.s 我假设在运行循环完成之前, UIButton 无法完成更新其内容。这不正确?
-
是的,但我认为 GCD 只是将任务安排在队列中,我认为它并不关心让 runloop 完成。如果它需要异步完成,那么为什么不在后台队列上运行并在完成时回调主队列?
标签: objective-c ios asynchronous grand-central-dispatch