0

我正在为 iphone 开发一个 rss 提要应用程序,因为我有一个表格视图,当用户单击标题时,所有提要标题都将显示,详细视图将显示标题、描述和图像,但由于应用程序需要时间加载,因此面临性能问题因为图像UIImageView来自下面的图像 url,所以图像是我的代码。

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非常快速地控制而不损失性能或显示活动指示器,直到图像完全单独加载。请帮助我。

4

5 回答 5

3

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

于 2012-11-22T23:08:45.147 回答
1

看看这里

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

                          }];
于 2013-10-01T12:20:01.907 回答
1

嗨,您还可以使用第三方类来解决您的问题,称为AsyncImageView

或者您可以创建自己的类,该类具有下载图像的NSURLConnectionDelegate

当由于同步 url 请求而导致 UI 锁定时,这些解决方案也可以解决您的问题。

于 2012-11-23T03:35:36.130 回答
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];

}

谢谢

于 2012-11-23T04:50:38.453 回答
-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];
}

希望这会帮助你。

于 2013-07-19T11:45:45.633 回答