2012-11-22 42 views
0

正在为iphone开发一个rss feed应用程序,因为我有一个tableview,当用户点击标题时,所有的feed标题将显示,一个详细视图将显示标题,描述和图像,但面临着性能问题,因为应用程序花费时间加载图像UIImageView,因为图像来自下面的图像url是我的代码。从url加载图像到uiimageview使iphone应用程序性能下降

NSURL *url = [NSURL URLWithString:imageURL]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImageView *subview = [[UIImageView alloc] initWithFrame:CGRectMake(110,10,100,80)]; 
[subview setImage:[UIImage imageWithData:data]]; 
[cell addSubview:subview]; 
[subview release]; 

在这段代码imageurl是来自rss和处理到UIImageView来显示图像。如果我删除这个特定的代码,性能很好,因为所有的数据都是文本。

因此,如何才能从url中获取图像并快速显示到UIImageView控件,而不会丢失性能或显示活动指示器,直到完全分开加载图像。请帮助我。

+1

请修正你的键盘上的Shift键。 :) – rmaddy

回答

3

切勿在主线程上执行网络调用。 Apple为此提供了一个有用的示例应用程序。请参阅LazyTableImages示例应用程序以正确加载背景中的图像。

1

嗨,你还可以使用第三方的类名为AsyncImageView

您的问题或者您也可以创建自己的类有NSURLConnectionDelegate是downloads an image

这些解决方案还可以解决你的问题,当用户界面是锁定由于同步网址请求。

+0

感谢您的纠正。 – objectiveCarlo

0

你可以试试这个,

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^(void) { 
    [self loadImage]; 
}); 

-(void) loadImage 
{ 
    NSURL *url = [NSURL URLWithString:imageURL]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    UIImageView *subview = [[UIImageView alloc] initWithFrame:CGRectMake(110,10,100,80)]; 
    [subview setImage:[UIImage imageWithData:data]]; 
    [cell addSubview:subview]; 
    [subview release]; 

} 

感谢

-1

你可以试试这个

//in .h file 

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]; 
} 

希望这会帮助你。

1

看看here

[DLImageLoader loadImageFromURL:imageURL 
          completed:^(NSError *error, NSData *imgData) { 
           imageView.image = [UIImage imageWithData:imgData]; 
           [imageView setContentMode:UIViewContentModeCenter]; 

          }]; 
+0

这只是一个非常有用的图书馆。 (1)下载文件(2)放到你的项目中(3)使用你上面看到的命令。这个图书馆吃所有其他图书馆图像下载**十几十十分......如此优雅,如此坚实。它可以做所有的事情,缓存,作品。很简单........... – Fattie

相关问题