Iphone 在表视图的单元格中使用UIWebView时,如何提高性能?

Iphone 在表视图的单元格中使用UIWebView时,如何提高性能?,iphone,multithreading,uitableview,Iphone,Multithreading,Uitableview,我正在创建一个使用web服务的应用程序。并检索用户列表和详细信息,如图像、用户id和名称。我在表视图中显示了与用户相关的所有信息,因此表视图中的每个单元格都有一个包含for表的图像。我正在使用自定义单元类来创建单个单元。选择表中的任何一行将显示一个详细视图(使用导航),其中显示一个较大的图像以及与我选择的特定用户相关的所有详细信息 在customcell和detail view类中,我使用web视图显示图像。 但当我运行应用程序时,图像显示会有一点延迟,细节视图也会出现同样的情况 是否有其他方法

我正在创建一个使用web服务的应用程序。并检索用户列表和详细信息,如图像、用户id和名称。我在表视图中显示了与用户相关的所有信息,因此表视图中的每个单元格都有一个包含for表的图像。我正在使用自定义单元类来创建单个单元。选择表中的任何一行将显示一个详细视图(使用导航),其中显示一个较大的图像以及与我选择的特定用户相关的所有详细信息

在customcell和detail view类中,我使用web视图显示图像。 但当我运行应用程序时,图像显示会有一点延迟,细节视图也会出现同样的情况

是否有其他方法可以提高表视图的性能,以便在图像加载和详细视图中不出现任何延迟的情况下平滑滚动表视图?? 这是代码

- (UITableViewCell *)tableView:(UITableView *)tableView 
            cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier ";

CustomCell *cell = (CustomCell *)[tableView 
                                  dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if (cell == nil)  
{

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil ];
    //cell = [[CustomCell alloc] initwi ];
    for (id oneObject in nib)
        if ([oneObject isKindOfClass:[CustomCell class]])
           cell = (CustomCell *)oneObject;

}
NSUInteger row = [indexPath row];
NSString *imageName = [imgArray objectAtIndex:row];
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName];

NSURL *url = [NSURL URLWithString:completeImageUrl];
//NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];     /// check to see if we are getting all the arrays such as image array and userId array and name array of same size..
if(image == nil)
{

}
cell.imgView.image = image;                             /// other wise an execption of out out array range will be shown

[image release];
[imageName release];

//[cell.webView initWithFrame:CGRectZero];
//[cell.webView loadRequest:requestObj];
//cell.webView.frame = CGRectMake(20, 0, 80.0, 64);
cell.userIdLabel.text = (NSString *)[userId objectAtIndex:row];
cell.nameLabel.text = (NSString *)[userName objectAtIndex:row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}`

我想问题可能在imgaray数组中,因为我正在从其他类设置它。在这里,我请求web服务并获取有关用户的所有数据


非常感谢您的帮助。提前感谢

有一个富文本表视图单元格类(我认为TTStyledTextTableCell)——应该比嵌入式UIWebView渲染得快得多。您也可以自己滚动,但这需要更长的时间。

使用
UIWebView
显示单个图像是过分的。您应该使用
NSURLConnection
(或许多可选HTTP包装器/库之一)加载图像数据,并使用
UIImageView
在每个表格单元格中显示图像数据。根据我的经验,在使用
UIWebView

时,没有办法(或者至少没有直接的方法)消除渲染延迟。为什么要使用webview来显示图像。应改用Imageview。如果您是从服务器获取图像,那么您应该在单独的线程中获取这些图像,并且在收到图像后,您应该重新加载该特定行

某些代码片段如下所示:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
    ...
    ...
    UIImage *img = (UIImage *)[imagesArray objectAtIndex:indexPath.row];
    if(img == nil){
        [imgView setImage:temporaryImage];
        [NSThread detachNewThreadSelector:@selector(getTheThumnbails:) toTarget:self withObject:indexPath];
    }
    else 
      [imgView setImage:img];
如需进一步帮助,请查看

希望这有帮助

谢谢


Madhup我也有同样的问题。为此,我使用了EGOImageCache和一些东西。 找到这个

下载以“EGO”开头的文件,并将其添加到项目中

并在任何需要放置图像的位置编写以下代码:

EGOImageView *imgView = [[EGOImageView alloc] initWithFrame:CGRectMake(50,50,220,360)];
NSString *imageName = [imgArray objectAtIndex:row];
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName];

NSURL *url = [NSURL URLWithString:completeImageUrl];

imgView.imageUrl = url;

[self.view addSubView:imgView];
就这样。在任何需要图像的地方使用类似的代码。 在第一次加载时,下载图像需要一些时间。但稍后它将缓存图像并在下次使用它

是否有其他方法可以提高表视图的性能,以便在不延迟图像加载的情况下平滑滚动表视图

对此,答案是


您可以在
webviewdiload
上实现延迟加载,这表明webview已经完全加载了

好的,最后我从我的应用程序中删除了uiweb视图,并使用了Imaged view并成功。 我使用了tweetie开发者提供的链接。给你

我使用ABTableViewCell类并使用代码创建了整个单元格。 当我执行应用程序时,滚动非常不平稳。在应用了近4个小时后,在惰性加载的帮助下,我能够顺利运行我的应用程序。我将从url检索到的数据存储到一个数组中,然后在tableView中应用这个概念:CellForRowatineXpath: 方法


谢谢你们帮助我…

我也尝试了图像查看,但我的应用程序崩溃了好几次。你有那个班级的链接吗。感谢您的回复文档位于-实际上甚至还有一个函数(
[ttstyledtexttextfromxhtml:
)这将把简单的XHTML转换成一个样式文本块,你可以粘贴在单元格中。我确实使用了图像视图,但在ui表格视图单元格中使用了图像视图,然后滚动表格视图会导致应用程序崩溃,同时应用程序会崩溃,选择表格中的任何行来显示详细视图。应用程序的任何崩溃都是由于你的错误造成的,不使用
UIImageView
。我在我的项目中一直使用这种方法,其他很多项目也是如此。我在mah quesn中粘贴了上面的代码。你能告诉我我在哪里出错吗?是的,我从服务器获取图像。我应该如何使用tableView:cellforrowatinexpath:method中的线程?thnx@Rakesh我已经在我的回答中提到,为了进一步的帮助,我也给了你另一个链接。请务必仔细阅读答案。好的,很抱歉。我已经实现了所有的代码和线程,但是当我调试应用程序并滚动表格视图时,应用程序正在崩溃。它给程序发送了接收信号:“EXC\u BAD\u ACCESS”。无法解释你的回答对我有多大帮助!感谢分享链接:)