gpt4 book ai didi

objective-c - 什么是异步图片下载以及如何下载太多图片?

转载 作者:行者123 更新时间:2023-12-04 02:46:03 24 4
gpt4 key购买 nike

我有太多图片无法从网上下载到 iPhone 中?如何使用异步图像下载构建应用程序?

最佳答案

最常见和简单的方法是将 NSURLConnection 与异步请求一起使用。与请求集委托(delegate)创建连接,当接收到下一个数据 block 、完成加载或失败时,它会在后台调用委托(delegate)方法开始加载数据。当加载第一个对象时,从下一个开始,依此类推。这是稍微简化的工作代码:

- (id)init...{
//...
requestData = [[NSMutableData alloc] initWithCapacity:1000000];
myImages = [[NSMutableArray alloc] initWithCapacity:100];
myImagesAddresses = [[NSMutableArray alloc] initWithCapacity:100];
[myImagesAddresses addObject:@"http://mysite.com/image1"];
[myImagesAddresses addObject:@"http://mysite.com/image2"];
//...
[self loadNextImage];
//...
}

-(void)loadNextImage{
if ([myImagesAddresses count]){
NSURL * imageURL = [NSURL URLWithString:[myImagesAddresses lastObject]];
NSURLRequest * myRequest = [NSURLRequest requestWithURL:imageURL];
[[NSURLConnection alloc] initWithRequest:myRequest delegate:self];
NSLog(@"start load URL:%@", imageURL);
}
else{
NSLog(@"No more images to load");
// all images are ready to use!
}
}

// connection delegate methods
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{
NSLog(@"more data...");
[requestData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)inConnection{
[myImages addObject:[UIImage imageWithData:[NSData dataWithData:requestData]]];
[inConnection release];
inConnection = nil;
NSLog(@"Image from:%@ loaded",[myImagesAddresses lastObject]);
[myImagesAddresses removeLastObject];
[self loadNextImage];
}

- (void)connection:(NSURLConnection *) inConnection didFailWithError:(NSError *)error{
[inConnection release];
inConnection = nil;
NSLog(@"Image from:%@ not loaded",[myImagesAddresses lastObject]);
[myImagesAddresses removeLastObject];
[self loadNextImage];
}

关于objective-c - 什么是异步图片下载以及如何下载太多图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2408010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com