如何在Objective-C中确保只调用一个函数,直到另一个函数准备就绪?
更新
-(void)reloadJsonFromServer {
[[Sync sharedObject] synchronise];
[self reload];
}
我有这个功能。 第二个函数“reload”只应该被调用,如果第一个函数是 - 在这种情况下它是一个单元 - 已经准备好了。就绪意味着第一个功能不再运行。
答案 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)
在过去的几天里,我已经了解了有关通知的内容。 我认为这也是一个好方法,可以处理这样的事情。有关此内容的更多信息,请参阅此博客条目。
答案 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/