我如何确保在Objective-C中,一个函数只被调用,直到另一个函数准备好了?只有调用函数,如果另一个函数准备就绪
更新:
-(void)reloadJsonFromServer {
[[Sync sharedObject] synchronise];
[self reload];
}
我有这个功能。 第二个函数“reload”只应该被调用,如果第一个函数是 - 在这种情况下它是一个单例 - 已经准备就绪。就绪意味着,第一个功能不再运行。
我如何确保在Objective-C中,一个函数只被调用,直到另一个函数准备好了?只有调用函数,如果另一个函数准备就绪
更新:
-(void)reloadJsonFromServer {
[[Sync sharedObject] synchronise];
[self reload];
}
我有这个功能。 第二个函数“reload”只应该被调用,如果第一个函数是 - 在这种情况下它是一个单例 - 已经准备就绪。就绪意味着,第一个功能不再运行。
那么你想等待一个异步方法的完成?有很多方法可以做到这一点。
synchronise
方法本身调用reload
在对象上,当它完成dispatch_async
的reload
方法,并有它只是wait
直到其他方法填充您继续之前等待一些标志或数据结构(BOOL synchronised
或类似)。请注意,如果您的reload
方法对UIKit
执行任何操作,那么您需要在主线程上运行它。synchronise
的运行方式,因此它不会实际返回给调用方,直到完成同步为止,然后dispatch_async
方法为reloadJsonFromServer
。synchronise
如在第三点,但代替使用dispatch_async
,同时添加的方法的调用的NSOperationQueue
作为NSOperation
S,与reload
依赖于synchronise
完成。操作队列将在此之后处理它。这些只是少数,我相信其他人可以建议更多。
是的,我想等异步方法,对。问题是,“同步”在Sync类中调用一些其他功能。当我想嵌入一个回调函数时,我遇到了同样的问题,即在Sync类中的其他函数准备就绪之前调用“reload”函数。你的第二点是什么事情?你写了关于标志。 – teawithfruit
是的,第二点是在'reload'方法继续执行它应该做的事情之前,等待一个值被设置(一个事件处理标志或某事)。你'dispatch_async',这样接口仍然可以更新,同时主循环继续进行。 – darvids0n
在过去的几天里,我学习了一些关于通知的内容。 我认为这也是一个好方法,来处理这样的事情。欲了解更多关于这个看看这个博客条目的信息。
有点晚了,但NSNotification它可以处理。
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserverForName:nil
object:nil
queue:nil
usingBlock:^(NSNotification *notification)
{
NSLog(@"%@", notification.name);
}];
看看这个:http://nshipster.com/nsnotification-and-nsnotificationcenter/
是什么意思的功能做好准备? –
您需要在这里提供更多信息。 –
你说得对。我已经添加了更多信息。 – teawithfruit