不知道该怎么做

布鲁吉尼

我弄得一团糟,试图找到一种熟练的方法来解决这个问题,但是却陷入困境。我现在的问题是,我要在执行代码之前先执行代码,这与我的代码块有关。

以下代码的问题在于,在添加postToFormmy之前,该方法已被调用并执行convertedImages我该如何解决这个问题,以等待它发生?还是我会以完全错误的方式来解决这个问题?(我也需要了解内存使用情况,需要在发布信息后释放内存。)

这是包含问题的代码:

// create serial queue
dispatch_queue_t queue = dispatch_queue_create("myQueue", 0);

// create dispatch group
dispatch_group_t group = dispatch_group_create();

for(id photos in photoUrls) {
    NSString *urlString = photos;

    // enqueue operation in queue
    dispatch_async(queue, ^{
        // enter the group
        dispatch_group_enter(group);

        // do something async, I do use another dispatch_queue for example
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            // wrap in autoreleasepool to release memory upon completion
            @autoreleasepool {
                // here for example the nested operation sleeps for two seconds
                NSURL *url = [NSURL URLWithString:urlString];
                ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

                [library assetForURL:url resultBlock:^(ALAsset *asset) {

                    //TODO: Deal with JPG or PNG
                    NSData *imageData = UIImageJPEGRepresentation([self thumbnailForAsset:asset maxPixelSize:1000], 0);
                    NSString *base64 = [imageData base64EncodedString];
                    NSLog(@"base64::%@",base64);
                    [convertedImages addObject:base64];

                } failureBlock:^(NSError *error) {
                    NSLog(@"that didn't work %@", error);
                }];


                dispatch_group_leave(group);
            }
        });

        // wait until the nested async operation leaves the group (e.g finishes its job)
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

        NSLog(@"Finished single operation.");
    });
}

// will be called once all operations complete
dispatch_async(queue, ^{
    NSLog(@"Finished all jobs. ");
    NSLog(@"how many::%lu",(unsigned long)convertedImages.count);
    [jsonWithPhotos setObject:convertedImages forKey:@"photo64"];
    [self postToForm];
});
安东尼奥·E。

在加载所有图像之前调用完成块的原因是调用dispatch_group_leave(group);位置错误。您应该在ALAssetsLibrary的结果块(和错误块)中调用它。其余的是正确的(事实上,正如苹果公司建议实现队列的完成块一样:由于GCD的专用队列是串行的,因此完成块仅是队列本身的最后一块)。

编辑:按要求:事实是ALAssetsLibrary需要一些时间来提取请求的url处的数据(实际上有一个完成块,暗示该操作是异步的)。因此,在为当前网址请求图片后,您立即释放了由创建的信号量,dispatch_group_enter并且可能在ALAssetsLibrary执行完完成代码块之前发生了。

现在,请记住,如何实现队列的完成块仅对串行队列有效,从iOS 5+开始,您可以通过指定DISPATCH_QUEUE_CONCURRENTas队列类型来创建并发队列(与全局队列相同),这种方法不再有效。如果在这种情况下您没有并发队列,那么我将检查当前URL是否是ALAssetsLibrary结果块中的最后一个,并在其中调用完成块。

为了完整起见,您可以使用dispatch_semaphore_t来处理这种情况,从逻辑上讲,它比使用组等待(这里的组由1个运算组成)更正确,但是,我再说一遍,从逻辑上讲,结果更好。

我写的所有内容都写在Apple的并发编程指南中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我得到 6 次:财产 _______ 是不允许的(不知道该怎么做)

来自分类Dev

Kotlin有array.indexOf,但是我不知道该怎么做array.indexOfBy {lambda}

来自分类Dev

试图将带有html + scss的站点部署到gitlab,并且不知道该怎么做

来自分类Dev

如何为这种特殊情况输入配方,我不知道该怎么做

来自分类Dev

我正在尝试在python的json输出中获取与名称关联的值。我不知道该怎么做

来自分类Dev

我想在几秒钟后显示一个 TextView。不知道该怎么做

来自分类Dev

我想在 React Native 中获得类似的背景,但不知道该怎么做?

来自分类Dev

Flathub 告诉我为 LibreOffice 做点什么。老实说,我不知道该怎么做

来自分类Dev

我只是想在我的不良代码中添加教程,并且需要位置帮助,但是我不知道该怎么做,知道吗?

来自分类Dev

我在pygame中使Checkers以我想要移动的方式是单击2次鼠标,但是我不知道该怎么做

来自分类Dev

插件默认隐藏元素,不知道怎么做

来自分类Dev

不知道怎么做这个功能

来自分类Dev

谁能帮我这个代码?我需要将其转换为Rails 4,但我不知道该怎么做。(routes.rb文件从rails 2到rails 4)

来自分类Dev

我不知道在这个arduino示例中下一步该怎么做

来自分类Dev

我有一个 .osm 文件,不知道下一步该怎么做?

来自分类Dev

不知道该如何异步

来自分类Dev

无法卷曲图片。不知道该怎么办

来自分类Dev

在Visual Studio 2013中删除方法“概述”(不知道该怎么称呼)

来自分类Dev

不知道该怎么用。和$操作符在Haskell

来自分类Dev

如何迭代存储的元素?(我不知道该怎么说。)

来自分类Dev

我的CNN Keras预测不正确,我也不知道该怎么办

来自分类Dev

vlookup中的数据不可用错误:不知道该怎么办

来自分类Dev

在插槽内的组件内使用组件...不知道该怎么写

来自分类Dev

我有此错误,我不知道该怎么办

来自分类Dev

用户返回nil。不知道该怎么办

来自分类Dev

不知道该怎么办一个纯PHP页面

来自分类Dev

Apple Mach-O Linker错误,我不知道该怎么办

来自分类Dev

更新控制台/登录应用内。我真的不知道该怎么解释

来自分类Dev

以div为中心;不知道该怎么办

Related 相关文章

  1. 1

    我得到 6 次:财产 _______ 是不允许的(不知道该怎么做)

  2. 2

    Kotlin有array.indexOf,但是我不知道该怎么做array.indexOfBy {lambda}

  3. 3

    试图将带有html + scss的站点部署到gitlab,并且不知道该怎么做

  4. 4

    如何为这种特殊情况输入配方,我不知道该怎么做

  5. 5

    我正在尝试在python的json输出中获取与名称关联的值。我不知道该怎么做

  6. 6

    我想在几秒钟后显示一个 TextView。不知道该怎么做

  7. 7

    我想在 React Native 中获得类似的背景,但不知道该怎么做?

  8. 8

    Flathub 告诉我为 LibreOffice 做点什么。老实说,我不知道该怎么做

  9. 9

    我只是想在我的不良代码中添加教程,并且需要位置帮助,但是我不知道该怎么做,知道吗?

  10. 10

    我在pygame中使Checkers以我想要移动的方式是单击2次鼠标,但是我不知道该怎么做

  11. 11

    插件默认隐藏元素,不知道怎么做

  12. 12

    不知道怎么做这个功能

  13. 13

    谁能帮我这个代码?我需要将其转换为Rails 4,但我不知道该怎么做。(routes.rb文件从rails 2到rails 4)

  14. 14

    我不知道在这个arduino示例中下一步该怎么做

  15. 15

    我有一个 .osm 文件,不知道下一步该怎么做?

  16. 16

    不知道该如何异步

  17. 17

    无法卷曲图片。不知道该怎么办

  18. 18

    在Visual Studio 2013中删除方法“概述”(不知道该怎么称呼)

  19. 19

    不知道该怎么用。和$操作符在Haskell

  20. 20

    如何迭代存储的元素?(我不知道该怎么说。)

  21. 21

    我的CNN Keras预测不正确,我也不知道该怎么办

  22. 22

    vlookup中的数据不可用错误:不知道该怎么办

  23. 23

    在插槽内的组件内使用组件...不知道该怎么写

  24. 24

    我有此错误,我不知道该怎么办

  25. 25

    用户返回nil。不知道该怎么办

  26. 26

    不知道该怎么办一个纯PHP页面

  27. 27

    Apple Mach-O Linker错误,我不知道该怎么办

  28. 28

    更新控制台/登录应用内。我真的不知道该怎么解释

  29. 29

    以div为中心;不知道该怎么办

热门标签

归档