Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何创建一个异步方法来处理来自委托的数据?_Ios_Objective C_Asynchronous_Delegates - Fatal编程技术网

Ios 如何创建一个异步方法来处理来自委托的数据?

Ios 如何创建一个异步方法来处理来自委托的数据?,ios,objective-c,asynchronous,delegates,Ios,Objective C,Asynchronous,Delegates,我使用btstack在iPhone和外部设备之间进行通信。我想发送一个特殊命令来检索设备的特殊数据。但我只能从btstack的handlePacket:method获取数据。我只能使用委托来处理数据。 但我想做一个这样的方法: - (void)readDataAsyncWithCompletionHandler:(Handler)handler 处理程序块应该获取数据。 我不知道该怎么做。 我制作了一个命令类来进行命令构造和发送 我知道我们可以用c#中的wait!那么如何在ios中处理它呢?你

我使用btstack在iPhone和外部设备之间进行通信。我想发送一个特殊命令来检索设备的特殊数据。但我只能从btstack的handlePacket:method获取数据。我只能使用委托来处理数据。 但我想做一个这样的方法:

- (void)readDataAsyncWithCompletionHandler:(Handler)handler
处理程序块应该获取数据。 我不知道该怎么做。 我制作了一个命令类来进行命令构造和发送


我知道我们可以用c#中的wait!那么如何在ios中处理它呢?

你应该这样写

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    //do you time consuming task


   dispatch_sync(dispatch_get_main_queue(), ^{
       //if you are doing any interaction with UI, do it here

   });

});

最佳实践是在这种情况下使用大集中调度。是一个初学者友好的教程,是GCD上的Apple官方文档。

您可以使用

[self performSelectorInBackground:@selector(theMethod) withObject:nil];
或创建NSInvocationOperation对象

NSInvocationOperation operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(theMethod) object:nil];
并将其添加到NSOperationQueue

NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [queue addOperation:operation];

或者如上所述创建一个调度异步块。

您应该添加当前使用委托方法的方式。如果忽略了重要的细节,就不可能提出可行的解决方案。