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
是函数调用,不是方法调用。它以一个块作为第二个参数。块内的代码是您放置要在后台调用的实际代码的地方。
我有一些代码是从一本使用 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
是函数调用,不是方法调用。它以一个块作为第二个参数。块内的代码是您放置要在后台调用的实际代码的地方。