我有一点问题,我尝试使用AsyncImageView类将一些图像从xml文件显示到我的tableview中,我在网站上找到这个类并且它运行得很好,问题是如果我慢慢向下滚动图像几乎立即加载,如果我快速向下滚动图像需要一秒钟才能加载......这就是代码
#import "AsyncImageView.h"
@implementation AsyncImageView
- (void)dealloc {
[connection cancel]; //in case the URL is still downloading
}
- (void)loadImageFromURL:(NSURL*)url {
//in case we are downloading a 2nd image
NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //notice how delegate set to self object
}
//the URL connection calls this repeatedly as data arrives
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData {
if (data==nil) { data = [[NSMutableData alloc] initWithCapacity:2048]; }
[data appendData:incrementalData];
}
//the URL connection calls this once all the data has downloaded
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
//so self data now has the complete image
connection=nil;
if ([[self subviews] count]>0) {
//then this must be another image, the old one is still in subviews
[[[self subviews] objectAtIndex:0] removeFromSuperview]; //so remove it (releases it also)
}
//make an image view for the image
UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:imageView];
imageView.frame = self.bounds;
[imageView setNeedsLayout];
[self setNeedsLayout];
//don't need this any more, its in the UIImageView now
data=nil;
}
- (UIImage*) image {
UIImageView* iv = [[self subviews] objectAtIndex:0];
return [iv image];
}
@end
这是表格代码
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
else {
AsyncImageView* oldImage = (AsyncImageView*)
[cell.contentView viewWithTag:999];
[oldImage removeFromSuperview];
}
elemento = [array objectAtIndex:indexPath.row];
NSString *indirizzoImmagine = [elemento objectForKey:@"Descrizione"];
CGRect frame;
frame.size.width=88;
frame.size.height=88;
frame.origin.x=0;
frame.origin.y=0;
AsyncImageView* asyncImage = [[AsyncImageView alloc] initWithFrame:frame];
asyncImage.tag = 999;
NSURL *url = [NSURL URLWithString:indirizzoImmagine];
[asyncImage loadImageFromURL:url];
cell.accessoryView = asyncImage;
return cell;
}
如何优化tableview?
答案 0 :(得分:0)
您的网络可能无法跟上加载每张图片所需的速度。首先,我要确保您的图片很小,接近您的相框尺寸。此外,通过您加载图像的方式,以及iOS回收表格单元格的方式,您可以为已回收的单元格加载图像。如果是这种情况,只需取消oldImage
引用上的负载即可。