在Obj-C中同步异步方法的版本

时间:2011-03-23 10:43:50

标签: objective-c ios asynchronous synchronous

在Objective-C中制作异步方法的同步版本的最佳方法是什么(对于iOS,如果重要的话)?

假设您有一个使用这两种方法的课程:

- (void) asyncDoSomething; // Starts an asynchronous task. Can't be changed.
- (void) onFinishDoSomething; // Called when the task is finished 

如何实现在任务完成之前不会返回的同步doSomething

2 个答案:

答案 0 :(得分:1)

好的,所以你可以声明一个全局布尔值,告诉你继续或等待,在你调用- (void)asyncDoSomething;方法之前,你将BOOL wait设置为YES,然后在方法之后做

while (wait) {
    [NSThread sleepForTimeInterval:1];
}

等待您的回复,并在异步回调- (void)onFinishDoSomething;中将布尔值设置为NO;

这样,您的方法仍称为异步,但后面的代码在响应之前不会执行。它会等待它是同步的。

答案 1 :(得分:0)

进入asyncDoSomething实现并删除NSThread / NSOperation /回调代码。