Ios 异步加载图像?

Ios 异步加载图像?,ios,objective-c,uiimageview,uiimage,lazy-loading,Ios,Objective C,Uiimageview,Uiimage,Lazy Loading,如何异步加载图像?这就是我目前正在做的(从加载图像缩略图的开源代码中借用): 我尝试将以下内容添加到方法中,但它为NSURL生成了一个错误: dispatch_queue_t imageLoadQueue = dispatch_queue_create("com.g.load", NULL); dispatch_async(imageLoadQueue, ^{ //Wait for 5 seconds... usleep(1000000); NSArray *docP

如何异步加载图像?这就是我目前正在做的(从加载图像缩略图的开源代码中借用):

我尝试将以下内容添加到方法中,但它为NSURL生成了一个错误:

dispatch_queue_t imageLoadQueue = dispatch_queue_create("com.g.load", NULL);

dispatch_async(imageLoadQueue, ^{
    //Wait for 5 seconds...
    usleep(1000000);

    NSArray *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];    

    for(int k=0; k < [images count];k++){
        NSLog(@"Loading %d Image", k);
        NSString *imgURL = [images objectAtIndex:k];
        NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgURL]];
        [imgData writeToFile:[NSString stringWithFormat:@"%@/%@", docPath, [imgURL lastPathComponent]] atomically:YES];
    }

    [[self collectionView] reloadData];
    NSLog(@"DONE WITH ALL IMAGES");
});
方法内部->

- (UIImage*)thumbnailListView:(ThumbnailListView*)thumbnailListView
                     imageAtIndex:(NSInteger)index  
使用此->

NSURLConnection *aNSURLConnection= [[NSURLConnection alloc]initWithRequest:<#(NSURLRequest *)#> delegate:<#(id)#> startImmediately:<#(BOOL)#>];
方法,直到您的
推荐阵列
耗尽。

只需这样做

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    for (int k=0; k<[images count]; k++) {
    NSString *imgURL = [images objectAtIndex:k];
    NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString:imgURL]];
    [data writeToFile:[NSString stringWithFormat:@"%@/%@", docPath, [imgURL lastPathComponent]] atomically:YES];

    }
});
dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,0)^{
对于(int k=0;k您可以使用从internet下载ur图像,并使用以下方法:

[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
使用AsyncImageView


使用AsyncImageview类文件,您也可以参考answer下载类文件并了解如何实现。它产生了什么错误?@ReidBelton检查更新的问题我在那里没有看到任何对
NSURL-length
的调用。您确定错误是由上述代码引起的吗?@nil我的错误立即检查代码,而不是dispa您的viewDidLoad中的tch_async块,并让我知道imgURLsame exception的值…并且执行不会进入该分派,它只是退出类似条件falseonce注释viewDidLoad:方法中的所有代码,并仅使用dispatch_async(dispatch_get_global_queue(dispatch_queue_PRIORITY_DEFAULT,0))^{NSData*数据=[NSData data WITHCONTENTSOFURL:[NSURL URLWithString:@”});并检查是否有数据?您不需要手动在块上调用此函数……它将为您异步运行。
- (UIImage*)thumbnailListView:(ThumbnailListView*)thumbnailListView
                     imageAtIndex:(NSInteger)index
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    for (int k=0; k<[images count]; k++) {
    NSString *imgURL = [images objectAtIndex:k];
    NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString:imgURL]];
    [data writeToFile:[NSString stringWithFormat:@"%@/%@", docPath, [imgURL lastPathComponent]] atomically:YES];

    }
});
[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
AsyncImageView *imageView = [[AsyncImageView alloc] initWithFrame:CGRectMake(Your Frame)];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
NSURL *URL =  [NSURL URLWithString:[NSString stringWithFormat:URL]];
[AsyncImageLoader defaultCache];
[[AsyncImageLoader sharedLoader]loadImageWithURL:URL target:self success:@selector(successSelector) failure:@selector(failureSelector)];