Objective-C:将 performSelector 转换为 Grand Central Dispatch

Objective-C: Convert performSelector to Grand Central Dispatch

我有一些代码是从一本使用 performSelectorOnMainThread 的书中获得的。我发现它在某些情况下会冻结应用程序并想使用 GCD 将其更改为后台线程:

这是我的代码:

 [self performSelectorOnMainThread:@selector(fetchData:) withObject:data waitUntilDone:YES];

换成GCD背景就这么简单

[self  dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
    (fetchData:) withObject:data
}];

当前正在抛出错误']'

不完全是。必须是:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self fetchData:data];
});

注意dispatch_async是函数调用,不是方法调用。它以一个块作为第二个参数。块内的代码是您放置要在后台调用的实际代码的地方。