UITableView上下滚动卡顿(获取网络数据,下载图片之后)

来源:互联网 发布:通达信股票行情软件 编辑:程序博客网 时间:2024/05/11 00:58

    今天遇到一个问题,从网络上,下载图片之后tableview上下滚动会很卡  通过上网查资料,找到解决办法  因为下载图片的时候是在主线程进行的  通过开辟一个子线程去下载图片 tableview上下滚动就不卡了。

在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、 Safari、App Store、iTunes、Game Center⋯几乎所有自带的应用中都能看到它的身影,可见它的重要性。

然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是table cell中包含图片的情况时。

实际上只要针对性地优化一下,这种问题就不会有了。有兴趣的可以看看 LazyTableImages这个官方的例子程序,虽然也要从网上下载图片并显示,但滚动时丝毫不卡。

下面就说说我对UITableView的了解。不过由于我也是初学者,或许会说错或遗漏一些,因此仅供参考。

首先说下UITableView的原理。有兴趣的可以看看 《About Table Views in iOS-Based Applications》。

UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。

它 内部包含0到多个UITableViewCell对象,每个table cell展示各自的内容。当新cell需要被显示时,就会调用tableView:cellForRowAtIndexPath:方法来获取或创建一个 cell;而不可视时,它又会被释放。由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。

此 外,UITableView还可以分为多个sections,每个区段都可以有自己的head、foot和cells。而在定位一个cell时,就需要2 个字段了:在哪个section,以及在这个section的第几行。这在iOS SDK中是用NSIndexPath来表述的,UIKit为其添加了indexPathForRow:inSection:这个创建方法。


     在设置数据模型的model中  设置数据时,如下

- (void)setGoods:(XHLGoods *)goods

{

    _goods = goods;


//通过开辟一个子线程来下载图片

   NSThread *thread = [[NSThread alloc]initWithTarget:self

selector:@selector(downImage) object:nil];

    [thread start];

   

    

    self.Title.text = goods.Title;

    self.KanDian.text = goods.KanDian;

    self.Price.text = goods.Price;

    

}


- (void)downImage

{

    self.BackGroudImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURLURLWithString:_goods.imageUrl]]];

}

   
0 0
原创粉丝点击