我正在将 URL 中的图像加载到我的应用程序中。图像尺寸很大(大约 1.5Mb)。如何使用多个线程(例如:2 个线程)来加载此图像以提高速度?如果使用一个线程来加载这个图像,我需要大约 5 秒,我想减少这个持续时间。
问问题
100 次
2 回答
1
你是对的。1.5Mb 是一个很大的图像,优化的方法是不要使用很多线程。虽然你在正确的轨道上。该技术称为“切片”,并在网络上大量使用以更快地加载图像。因此,在您的服务器中拍摄一张图像并将其切成 3 或 4 张较小的图片(而不是更多)。渲染时同时调用这 4 个图像。它将比一张大图片加载得更快。这也减少了最终用户的“感知”延迟。
此外,当您对图像进行切片时,可以更轻松地减少显示该图像部分所需的颜色数量,从而减小文件大小(有时相当显着)。
例如,谷歌确实曾经在其主搜索页面中为其主徽标执行此操作。看到 4 split us 它的标志图片?
切片的缺点是它增加了维护成本。有些人必须维护这些图像分割,并确保在应用程序不断变化时不会出现任何问题。
于 2013-07-19T04:14:55.563 回答
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 方法中停止它。
我希望这能帮到您。
于 2013-07-19T05:26:50.730 回答