如何使用异步方法处理来自委托的数据?

时间:2014-02-28 10:59:55

标签: ios objective-c asynchronous delegates

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

- (void)readDataAsyncWithCompletionHandler:(Handler)handler

处理程序块应该获取数据。 我不知道该怎么做。 我创建了一个Command类来执行命令构造和发送。

我知道我们可以在c#中使用await!那么如何在ios中处理它?<​​/ p>

3 个答案:

答案 0 :(得分:2)

你应该这样写。

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

   });

});

答案 1 :(得分:0)

最佳做法是在这种情况下使用Grand Central Dispatch。 Here是一本适合初学者的教程,this是关于GCD的官方Apple文档。

答案 2 :(得分:0)

您可以使用

[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];

或创建一个如上所述的dispatch_async块。