图像挂起并且需要很长时间才能从服务中填充

Images hangs and takes too long to populate from service

我正在尝试通过 Viewcontroller B 中的按钮单击获取图像。收到图像作为响应后,我使用 url 图像来填充 [=12= 上的图像视图], 填充时间太长并且挂起,而 scrolling.Is 有任何方法可以平滑地滚动视图而不冻结并尽早获得响应。

这条线不应该在主队列中

  NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[responseArr objectAtIndex:indexPath.row]valueForKey:@"CategoryImage"]]];

你可以改成这样

  NSString *getImagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg",n1.Id]];

    if([[NSFileManager defaultManager] fileExistsAtPath:getImagePath])
    {
        UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];
        cell.leftImageV.image =img;
        [cell.activity stopAnimating];
        cell.activity.hidden=YES;
    }
    else
    {

        [cell.activity startAnimating];
         cell.activity.hidden=NO;

        cell.leftImageV.image = nil;

        NSLog(@"xdasdxsadxa %@",n1.mainImgStr);

        dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

        dispatch_async(concurrentQueue, ^{
            __block NSData * imageData  = nil;
            dispatch_sync(concurrentQueue, ^{ 

                imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:n1.mainImgStr]];

                //Add the file name
                [imageData writeToFile:getImagePath atomically:YES]; //Write the file

            });

            dispatch_sync(dispatch_get_main_queue(), ^{

                if(imageData)
                { 
                    [self.collectionView reloadData];

                } 
            });
        }); 
    }

图像检索使用dispatch async,即不要在主队列上进行。

苹果文档: https://developer.apple.com/documentation/dispatch/1453057-dispatch_async