【IOS开发】UITableView的性能优化

一、.重用cell

  在数据源方法中,在可见的页面重复绘制

OC方法中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

SWIFT方法
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

因此 ,可以在该方法中做一些处理操作

OC处理操作
 static NSString *  ReusedCellID = "ReusedCellID";
  UITableViewCell * cell = tableView.dequeueReusableCellWithIdentifier( ReusedCellID, forIndexPath: indexPath)

swift的处理操作
 private let ReusedCellID = "ReusedCellID"
 let cell = tableView.dequeueReusableCellWithIdentifier( ReusedCellID, forIndexPath: indexPath)

  这样,就可以防止cell无限的被创建,重用cell

  

二、cell的图片异步加载

当设置图片异步加载之后,cell 的图片就放在了子线程中执行,但是,如果此时下滑,也会出现卡顿的现象

解决办法:

  异步下载,在以下两个方法中下载图片、  

// 当结束拖拽的时候
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

// 减速的时候
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

具体操作:  

//获取可见部分的对象
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visiblePaths)
{
  //获取的dataSource里面的对象,并且判断加载完成的不需要再次异步加载
  <code>
}

同时在cell绘制中也做限制
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
   {
      //开始异步加载图片
      <code>
   }}

三、尽量少用透明的图层

  内部的渲染机制

时间: 2024-08-05 02:12:54

【IOS开发】UITableView的性能优化的相关文章

IOS开发UITableView性能应用技巧TableViewCell的重用

?iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableViewCell对象??重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用.当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象

iOS开发 UITableView的方法和属性总结

本文描述UITableView的各种方法,属性,委托以及数据源.本文的目的只是总结UITableView的用法,详细的例子另撰文描述. 1 数据源  UITableViewDataSource协议 01 返回组(节)的个数,默认是返回1,如果只有1组数据,可以不用实现该方法. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 02 返回某一组的行数,该组由section的值决定 - (NSInteger)table

【UIKit】UITableView.05 性能优化

UITableView.05 性能优化: [为何要性能优化]:TableView拖屏过程中,不断有对象"消失"在屏幕上,但是这样的对象还是存在的,当拖拉过多后,导致内存严重泄漏. 解决方法:仅提供有限的对象,拖拉过程中,只是将内存地址存放的内容进行改变. [旧代码] -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITable

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询大多数的MySQ

直播APP开发之iOS开发中的列表优化思路

APP开发中,列表可能是平时我们打交道最多的UI控件之一,其重要性不言而喻,对其性能的优化同样至关重要.而对于iOS开发,列表就是我们常说的UITableView / UICollectionView.在进行直播APP开发时针对于列表的优化自然是必不可少的.这里以UITableView为例简略介绍一下列表优化思路.(1) cell复用.这是每一个iOS开发者都非常熟悉的一部分内容.我们经常在cellForRowAtIndexPath:中为每一个cell绑定数据,实际上在调用cellForRowA

UITableView的性能优化1

UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文将持续更新,力求将tableview的优化做到极致! Let`s begin! 治病就要先知道病因,我们先来分析一下影响tableview滚动性能的因素有哪些: 1 2 3 1.cellForRowAtIndexPath方法中处理了过多业务 2.tableviewCell的subview层级太复杂,

UITableView的性能优化

UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文将持续更新,力求将tableview的优化做到极致! Let`s begin! 治病就要先知道病因,我们先来分析一下影响tableview滚动性能的因素有哪些: 1 2 3 1.cellForRowAtIndexPath方法中处理了过多业务 2.tableviewCell的subview层级太复杂,

关于UITableView的性能优化(历上最全面的优化分析)

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 这个代理方法的实现,在可见的页面是会重复绘制页面的,所以绝大部分人都会在这里做一些代码处理 比如: static NSString *CellIdentifier = @"LazyTableCell"; UITableViewCell *cell = [tableView dequeue

iOS开发,UITableView相关问题

第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.count - 1 inSection:0]; [_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; //刷新指定cell NSIndexP

iOS开发UITableView基本使用方法总结

本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDataSource:然后 UITableView对象的 delegate要设置为 self:然后就可以实现这些delegate的一些方法拉. UITableView基本使用方法 1.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITable