iphone - 线程问题在 iOS 7 上表现不同

标签 iphone ios

我正在使用这个 Project来自 github,它是一个图像选择器。 自 ios7 以来,我不得不做一个非常小的更改,使您相册中的预览图像再次显示,但现在当您离开选择器并返回时,所选照片 (2/5) 重置为 0/5 即使我选择了照片。我该如何解决这个问题?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0) 似乎需要永远更新 ui,即使使用 dispatch_async(dispatch_get_main_queue() 重新加载其中的 ui。当我注释掉 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0) 时,图片会立即加载,但其他内容会损坏,这取决于队列。

这是带有 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0) 的代码片段 我更改了代码,我更改了注释掉的代码

AGIPCAssetsController.m:

- (void)loadAssets
{
    [self.assets removeAllObjects];

    __ag_weak AGIPCAssetsController *weakSelf = self;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        __strong AGIPCAssetsController *strongSelf = weakSelf;

        @autoreleasepool {
            [strongSelf.assetsGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

                if (result == nil) 
                {
                    return;
                }

                AGIPCGridItem *gridItem = [[AGIPCGridItem alloc] initWithImagePickerController:strongSelf.imagePickerController asset:result andDelegate:strongSelf];
                if ( strongSelf.imagePickerController.selection != nil && 
                    [strongSelf.imagePickerController.selection containsObject:result])
                {
                    gridItem.selected = YES;
                }
                [strongSelf.assets addObject:gridItem];
            }];
        }

        dispatch_async(dispatch_get_main_queue(), ^{

            [strongSelf reloadData];

        });

    });
    [strongSelf reloadData];

}

最佳答案

AGIPCGridItemUIView 的子类。 不要在后台线程上使用 UIKit 对象。

确保你需要后台线程,如果你需要,只将繁重的任务放到后台。创建 UIView 不应该是这种情况。

此外,不建议使用 PRIORITY_LOW 使用简单的 PRIORITY_DEFAULT

编辑:如果您好奇为什么它在 iOS 6 上有效:那是 UIKit 的实现细节。它仍然是错误的,但以某种方式达到了您的预期。

关于iphone - 线程问题在 iOS 7 上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967054/

相关文章:

ios - 警告 : "This app will not work with future versions of iOS"

iphone - Accelerate Framework for iPhone 中是否有计算点数组线性回归的函数?

ios - 为什么我的 Firebase 项目云消息传递 iOS 配置部分是空白的?

ios - 如何将 Cocoapods 与 Swift 项目集成?

ios - 贪婪的 UITabBarController?

ios - React Native,应用程序在模拟器上运行,但不能在真实的 iPhone 上运行

iphone - 有关iOS应用升级过程的具体信息

ios - Apple iOS Development Guide 上应该没有问题的时候

ios - 在 iOS 上持续跟踪用户位置

ios - 在 Swift 3 中显示 Facebook 事件