将图像从url加载到uiimageview会使iphone app性能降低

时间:2012-11-22 23:03:41

标签: iphone objective-c uiimageview

我正在为iphone开发一个rss feed应用程序,因为我有一个tableview,当用户点击标题时,所有的Feed标题都会显示,详细视图将显示标题,描述和图像,但是自应用程序采用以来我遇到了性能问题时间加载UIImageView中的图片,因为图片来自下面的图片网址是我的代码。

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控制而不会丢失性能或显示活动指示器,直到图像加载完全分开。请帮助我。

5 个答案:

答案 0 :(得分:3)

永远不要在主线程上执行网络调用。 Apple为此提供了一个有用的示例应用程序。请参阅LazyTableImages示例应用,了解在后台加载图片的正确方法。

答案 1 :(得分:1)

您好,您也可以使用名为AsyncImageView

的第三方课程

或者您可以创建自己的类,其中包含downloads an image

的NSURLConnectionDelegate

由于同步网址请求,这些解决方案还可以在UI锁定时解决您的问题。

答案 2 :(得分:1)

查看here

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

                          }];

答案 3 :(得分: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];

}

感谢

答案 4 :(得分:-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];
}

希望这会对你有所帮助。