只有在另一个功能准备好时才调用函数

时间:2011-08-30 01:16:54

标签: objective-c ios function

如何在Objective-C中确保只调用一个函数,直到另一个函数准备就绪?

更新

-(void)reloadJsonFromServer {
    [[Sync sharedObject] synchronise];
    [self reload];
}

我有这个功能。 第二个函数“reload”只应该被调用,如果第一个函数是 - 在这种情况下它是一个单元 - 已经准备好了。就绪意味着第一个功能不再运行。

3 个答案:

答案 0 :(得分:2)

所以你想等待异步方法的完成?有很多方法可以做到这一点。

  • 完成
  • 后,让synchronise方法在对象上调用reload
  • dispatch_async reload方法只有wait,直到另一个方法填充您正在等待的某些标记或数据结构,然后继续(BOOL synchronised或类似) 。请注意,如果reload方法对UIKit执行任何操作,则需要在主线程上运行它。
  • 更改synchronise的运行方式,以便它在完成同步之前不会实际返回给调用者,而是dispatch_async reloadJsonFromServer方法。
  • 更改synchronise,与第三点相同,但不是使用dispatch_async,而是将NSOperationQueue的两个方法调用添加为NSOperation,{{1}依赖于reload的完成。之后操作队列将处理它。

这些只是少数,我相信其他人可以提出更多建议。

答案 1 :(得分:0)

在过去的几天里,我已经了解了有关通知的内容。 我认为这也是一个好方法,可以处理这样的事情。有关此内容的更多信息,请参阅此博客条目。

Custom Events in Objective-C

答案 2 :(得分:0)

有点晚了,但是通过NSNotification可以处理它。

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserverForName:nil
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification *notification)
{
     NSLog(@"%@", notification.name);
}];

看看这个:http://nshipster.com/nsnotification-and-nsnotificationcenter/