You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现不执行首个方法的dispatch_async第二种调用方式?附代码场景

调整GCD调用结构并跳过指定方法的解决方案

嘿,我来帮你搞定这个问题!首先梳理下你的需求:你原本的代码里嵌套了dispatch_async调用,现在想换一种GCD的使用方式,同时完全跳过[self GetFullImage:firstID]这个方法。下面给你两种可行的方案:

方案1:简化嵌套结构,直接在主队列执行目标逻辑

原代码里的双层主队列异步嵌套其实没必要(因为都是在同一个主队列),既然要去掉获取原图的步骤,我们可以直接把所有需要执行的逻辑放在一个主队列异步任务里,结构更清晰:

NSString *firstID = @"https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg";

// 直接在主队列异步执行所有需要的逻辑,跳过GetFullImage
dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"0");
    NSLog(@"1");
    NSLog(@"2");
    // 记得确保PAN变量已经正确初始化,不然分享控制器会出问题
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:PAN applicationActivities:nil];
    // 这里可以加分享控制器的展示逻辑
    [self presentViewController:activityViewController animated:YES completion:nil];
});

方案2:使用自定义队列+主队列切换(另一种GCD调用方式)

如果想换一种更规范的GCD使用方式(比如把非UI逻辑和UI逻辑分开),可以创建一个自定义串行队列来处理非UI部分,再切回主队列处理分享控制器:

NSString *firstID = @"https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg";

// 创建自定义串行队列,用来处理非UI任务
dispatch_queue_t customShareQueue = dispatch_queue_create("com.yourapp.share-processing", DISPATCH_QUEUE_SERIAL);

dispatch_async(customShareQueue, ^{
    // 这里可以放原本的非UI预处理逻辑(现在去掉了GetFullImage,就只打日志)
    NSLog(@"0");
    NSLog(@"1");
    
    // 切回主队列处理UI操作(分享控制器属于UI,必须在主队列创建和展示)
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"2");
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:PAN applicationActivities:nil];
        [self presentViewController:activityViewController animated:YES completion:nil];
    });
});

几个重要的注意点:

  • 直接移除[self GetFullImage:firstID]就能实现不执行这个方法的需求,不用额外做其他操作
  • 所有UI相关的操作(比如创建和展示UIActivityViewController)必须在主队列执行,这一点一定要注意
  • 确保PAN变量在执行到创建分享控制器的代码时已经正确赋值,不然会导致初始化失败

内容的提问来源于stack exchange,提问作者user9137841

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:37:08