作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个应用程序,允许您浏览网站上的图片。我目前正在使用以下方式下载图像:
UIImage *myImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
效果很好,但可能很耗时。我首先下载了 20 张图像,但直到下载完所有图像大约需要 30 秒后我才能执行任何操作。
这一次的等待还不算太糟糕,但如果我想下载第21-40张图像,我还得再等30秒。
基本上,有没有一种方法可以一次下载这些图像而不中断任何动画?
谢谢。
最佳答案
当然,将下载任务放在一个线程中,并使用回调让您的程序知道每个图像何时完成。然后,您可以在图像加载完成时绘制图像,而不会占用应用程序的其余部分。 This link有一个模板可以用作示例。
这是一个快速但肮脏的例子:
- (void)downloadWorker:(NSString *)urlString
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] initWithData:data];
[self performSelectorOnMainThread:@selector(imageLoaded:)
withObject:image
waitUntilDone:YES];
[image release];
[pool drain];
}
- (void)downloadImageOnThread:(NSString *)url
{
[NSThread detachNewThreadSelector:@selector(downloadWorker:)
toTarget:self
withObject:url];
}
- (void)imageLoaded:(UIImage *)image
{
// get the image into the UI
}
为要加载的每张图像调用 downloadImageOnThread
,每个图像都会获得自己的线程,并且在每个图像完成时都会调用 imageLoaded
。
关于iphone - 如何在不耽误其他所有事情的情况下下载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368687/
我是一名优秀的程序员,十分优秀!