【问题标题】:get image faster than file URL比文件 URL 更快地获取图像
【发布时间】:2016-02-28 16:24:15
【问题描述】:

我正在我的 viewdidload 方法中创建一堆图像。这些图像来自 PFFile 的解析,因此它们包含我的图像数据的 fileURL。

我的问题是这两行代码大大减慢了我的应用程序并破坏了我的用户体验:

    //get scene object
    PFObject *sceneObject = self.scenes[i];


    //get the PFFile and filetype
    PFFile *file = [sceneObject objectForKey:@"file"];
    NSString *fileType = [sceneObject objectForKey:@"fileType"];

    //check the filetype
    if ([fileType  isEqual: @"image"])
    {
        //get image
        NSURL *imageFileUrl = [[NSURL alloc] initWithString:file.url];  
        NSData *imageData = [NSData dataWithContentsOfURL:imageFileUrl]; ********** these
        imageView.image = [UIImage imageWithData:imageData];  ********************* lines

    }

如何更快地获取此图像/这些图像(嵌套在 for 循环中)?我已经下载了包含 PFFiles 的 PFObjects 并将它们存储在本地。

我想我真的不明白文件 URL 是如何运作的。

谢谢。

【问题讨论】:

    标签: ios objective-c url parse-platform pffile


    【解决方案1】:
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{             
            NSURL *imageFileUrl = [[NSURL alloc] initWithString:file.url];  
            NSData *imageData = [NSData dataWithContentsOfURL:imageFileUrl]; 
            dispatch_get_main_queue(), ^{
               imageView.image = [UIImage imageWithData:imageData];
            });
        });
    

    尚未测试,但这是要点。从主队列中获取文件加载并使其异步。 UI 不会停滞不前,因为一旦调度此队列,它将返回并继续评估应用程序的其余部分。

    【讨论】:

    • 这很好用!我不得不将 dispatch_get_global(DISPATCH_PRIORITY_HIGH, 0) { 更改为 (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 和 (dispatch_get_main_queue() { 更改为 (dispatch_get_main_queue(), ^{ 但除此之外,这是一个非常快速的解决方案。
    • 感谢@user2792129 的编辑提示。很高兴这对你有用。
    【解决方案2】:

    我正在使用这样的东西:

    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [imageFrame addSubview:activityIndicator];
    activityIndicator.center = CGPointMake(imageFrame.frame.size.width / 2, imageFrame.frame.size.height / 2);
    [activityIndicator startAnimating];
    
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
            dispatch_async(queue, ^{
                NSData * imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:thumb]];
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIImage *image = [UIImage imageWithData:imageData];
                    img.image = image;
                    [imageOver addSubview:img];                    
                    [activityIndicator removeFromSuperview];
                });
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多