许多线程从URL加载图像

时间:2013-07-19 02:51:51

标签: iphone ios objective-c image ipad

我正在将图片从网址加载到我的应用中。图像尺寸很大(约1.5Mb)。如何使用多个线程(例如:2个线程)加载此图像以提高速度?如果使用一个线程加载此图像,我需要大约5秒,我想减少这个持续时间。

2 个答案:

答案 0 :(得分:1)

你是对的。 1.5Mb是一个很大的图像,优化的方法不是使用很多线程。虽然你走在正确的轨道上。该技术被称为“切片”,并且在网络上大量使用以更快地加载图像。因此,拍摄一张图像并将其切片为服务器中的3或4个较小的图片(而不是更多)。渲染时一次调用这4个图像。它将加载比一张大图片更快。这也减少了最终用户的“感知”延迟。

此外,当您对图像进行切片时,可以更轻松地减少显示图像部分所需的颜色数量,从而减少文件大小(有时会非常显着)。

作为一个例子,谷歌曾经在其主要搜索页面中为其主要徽标执行此操作。看到4分裂我们的徽标图像?

enter image description here

enter image description here

enter image description here

enter image description here

切片的缺点是它增加了维护成本。有些人必须保持这些图像分割,并确保在应用程序不断变化时没有任何问题。

答案 1 :(得分:0)

请尝试以下代码:

//in .h file declare the following objects:

    IBOutlet UIImageView *imgTest;

-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;

//in .m file write the following code:

-(IBAction)buttonTapped:(id)sender
{
    [self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}

-(void)LoadImage:(NSString *) urlString
{
    NSURL *imgURL=[NSURL URLWithString:urlString];
    NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
    [self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}

-(void)setImage:(NSData *) imgData;
{
    imgTest.image=[UIImage imageWithData:imgData];
}

您也可以在加载图片时使用活动指示器。在buttonTapped方法中启动它并在setImage方法中停止它。

我希望这会对你有所帮助。