ios - performSelectorOnMainThread 在另一个 View Controller 上调用选择器

标签 ios dispatch-async

以下代码运行良好:

   NSURL* urlAddressJSonUrl = [NSURL URLWithString:urlString];
        dispatch_async(globalQueue,
                       ^{
                           NSData *imageData = [NSData dataWithContentsOfURL:urlAddressJSonUrl];

                           [self performSelectorOnMainThread:@selector(setImage:)
                                                  withObject:[UIImage imageWithData:imageData] waitUntilDone:NO];
                       });

因为我需要从不同的 viewController 调用它,所以我想将它放在具有公共(public)全局帮助函数 (+) 的通用类中,所以我正在寻找一种方法来将选择器和目标作为参数传递给 performSelectorOnMainThread 以运行与

最佳答案

你暗示你有目标。你为什么不直接用目标来调用它呢?

NSURL* urlAddressJSonUrl = [NSURL URLWithString:urlString];
dispatch_async(globalQueue, ^{
    NSData *imageData = [NSData dataWithContentsOfURL:urlAddressJSonUrl];

   [target performSelectorOnMainThread:@selector(setImage:)
                            withObject:[UIImage imageWithData:imageData]
                         waitUntilDone:NO];
});

或者更好

NSURL* urlAddressJSonUrl = [NSURL URLWithString:urlString];
dispatch_async(globalQueue, ^{
    NSData *imageData = [NSData dataWithContentsOfURL:urlAddressJSonUrl];

    dispatch_async(dispatch_get_main_queue(), ^{
        [target setImage:[UIImage imageWithData:imageData]];
    });
});

关于ios - performSelectorOnMainThread 在另一个 View Controller 上调用选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21541680/

相关文章:

ios取消dispatch_async任务

ios - 调度同步的目的是什么?

ios - dispatch_sync 阻止我的 UI,我无法单击任何按钮

objective-c - NSProgressIndicator 在循环结束之前不会更新

ios - Firebase iOS SDK - 计算连接的用户

iphone - UITableViewController NavigationItem 按钮问题

android - glTranslatef/2D 视口(viewport)设置问题

android - 我用 cordova 开发了一个 android 应用程序,我也想将它转换为 iOS

ios - 将 URL 数据保存到变量

ios - Swift Midi Soundbank没有播放