Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ios中异步下载图像?_Ios_Objective C_Asynchronous_Objective C Blocks - Fatal编程技术网

如何在ios中异步下载图像?

如何在ios中异步下载图像?,ios,objective-c,asynchronous,objective-c-blocks,Ios,Objective C,Asynchronous,Objective C Blocks,我想首先在滚动视图上创建imageview。在这里我设置了占位符图像或为imageview提供背景色。这样所有的图像视图都会显示出来 - (void)LoadDataInScrollView { dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL); //totalImageGetDict into count total Number of object and generate ima

我想首先在滚动视图上创建imageview。在这里我设置了占位符图像或为imageview提供背景色。这样所有的图像视图都会显示出来

- (void)LoadDataInScrollView
{
    dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL);

    //totalImageGetDict into count total Number of object and generate imageview.

    for (int ivalue = 0; ivalue < [totalImageGetDict count]; ivalue++) 
    {
        dispatch_async(imageQueue, ^{

            //define x value
            CGFloat xOrigin =ivalue *ascrollView.frame.size.width+50;

            imageView = [[UIImageView alloc] init];
            imageView.tag = ivalue;
            [imageView setBackgroundColor:[UIColor whiteColor]];
            imageView.frame = CGRectMake(xOrigin-40,imgYpos, ascrollView.frame.size.width-20, scrollViewHight);

            //then here first i set already downloaded image.it's comes from another class. getImageLoadDict into images are already downloaded**

            if ([getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]!= nil)   
            {
                //dispatch_async(dispatch_get_main_queue(), ^{
                [imageView setImage:[getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]];
                //});

            } 
            else 
            {
                //totalImageGetDict into remaining images object and asynchronously download here.

                STVisionPhoto *photoObj = [totalImageGetDict objectForKey:[NSNumber numberWithInteger:ivalue]];
                UIImage *newimage = [photoObj image];

                dispatch_async(dispatch_get_main_queue(), ^{
                    [imageView setImage:newimage];
                });
           }

           [ascrollView addSubview:imageView];
        });
    }
}
-(void)LoadDataInScrollView
{
调度队列\u t imageQueue=调度队列\u创建(“映像队列”,NULL);
//totalImageGetDict计算对象总数并生成imageview。
对于(int-ivalue=0;ivalue<[totalImageGetDict计数];ivalue++)
{
调度异步(imageQueue^{
//定义x值
CGFloat xOrigin=ivalue*ascrollView.frame.size.width+50;
imageView=[[UIImageView alloc]init];
imageView.tag=ivalue;
[imageView setBackgroundColor:[UIColor whiteColor]];
imageView.frame=CGRectMake(xOrigin-40,imgYpos,ascrollView.frame.size.width-20,scrollViewHight);
//然后在这里首先我设置了已经下载的图像。它来自另一个类。getImageLoadDict到已经下载的图像中**
if([getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]!=nil)
{
//dispatch\u async(dispatch\u get\u main\u queue()^{
[imageView setImage:[getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]];
//});
} 
其他的
{
//totalImageGetDict转换为剩余图像对象,并在此处异步下载。
STVisionPhoto*photoObj=[totalImageGetDict objectForKey:[NSNumber numberWithInteger:ivalue]];
UIImage*newimage=[photoObj image];
dispatch\u async(dispatch\u get\u main\u queue()^{
[imageView setImage:newimage];
});
}
[ascrollView addSubview:imageView];
});
}
}
你可以用它来做。它很容易使用

编辑:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    UIImage * image = [UIImage imageWithData:[NSData dataWithContentsOfURL:your url]];

    dispatch_async(dispatch_get_main_queue(), ^{
        [imgview setImage:image];
    });
});
如果您不想使用任何库,可以尝试使用此代码:

UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake(12.5, 12.5, 80, 80);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 UIImage *profileImage;
 profileImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:YOUR_URL_STRING]]];
dispatch_async(dispatch_get_main_queue(), ^{
                            imgView.image = profileImage;

                                          });


                             });

[cell.contentView addSubview:imgView];

我不希望使用任何库。+1是为了不(直接)使用NSURLConnection的简单性。+1 ur ans是正确的。我检查并接受它,但它不满足我的条件。Thanx,我尝试了这一点,也遵循了Lazy loader类。+1 ur ans是正确的。我检查并接受它,但它不满足我的条件。您的代码中是否使用ASIHTT或AFNetworking?只是想看看你是否是-然后尝试在后台线程上使用这些类别异步下载图像。@RenoJones,我不使用那个类。我使用Nsurl类调用。啊,好的。然后选择SDWebImage(他们正在以更好的方式处理异步下载),这样你就不必为下载图像而头疼了。
(void)loadImg:(NSString *)url img :(UIImageView *)imgView{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
__weak UIImageView *imageV = imgView;
[imgView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"songRecDef"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    imageV.image = image;
    [imageV setNeedsLayout];
    NSLog(@"%@",response);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    [imageV setImage:[UIImage imageNamed:@"songRecDef"]];
    NSLog(@"%@",error);
}];
}