我有两节课。 ClassA
,有两种方法,MethodA
和MethodB
。 ClassB
,MethodC
。
我希望ClassA.MethodA
调用ClassB.MethodC
(它将在后台异步运行),当ClassB.MethodC
完成时,它会触发回调以调用ClassA.MethodB
(以及一些参数传回来。)
我该怎么做?
感谢。
答案 0 :(得分:1)
如果MethodC强烈连接到methodB,我会发送带完成块的参数:
- (void)methodC {
void(^blockName)(parameterTypes) = ^void(parameters) {
// The code that should be done after methodB finish.
};
[self.instanceOfClassA:blockName];
}
- (void)methodB:(void(^)(parameterTypes))blockName {
// Do what you need to here in method B.
blockName(parameters);
}
您也可以使用委托或ReactiveCocoa
解决此类问题。 RACSignal
是管理不同类之间流控制的一种非常好的方法。
答案 1 :(得分:1)
可以像这样声明method_C: - (oneway void)mothod_C。它将被称为async
您可以使用dispatch_async和完成块。对我来说不舒服。
MethodA
{
dispatch_async(dispatch_get_main_queue(),
^{
MethodC_withComplition:
^{
weak_classA.MethodB
}
})
}
可以使用[ClassB performSelectorInBackground:@selector(MethodC)withObject:@ [callingThread,callbackSelector]] 或同等学历 [NSThread detachNewThreadSelector:@selector(methodC :) toTarget:classB withObject:@ [callingThread,callbackSelector]]并在调用此任务的线程上使用callbackSelector。
使用带有ClassB的NSInvocationOperation和带参数回调的选择器MethodC,并推送到操作队列。在MethodC结束时使用[ClassA performSelectorOnMainThread:@selector(callbackSelector :)]
如果可能的话,用简单的回调为你介绍这个后台任务(NSOperation的子类)的操作。
至于我,最好使用NSOperation子类 - 变体4.当然,如果它适用于你的情况。