UITableView中的cell的优化
1.cell的重用
所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据Identifier从缓存中获取cell,如此的循环往复,这样只会创建固定的cell对象,节省了内存。
下面是重用cell的代码:
//1. 定义重用的标识
static NSString *reuseId = @"tg";
//2,从缓存中获取重用cell
CZTgCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
//3.判断如果cell等于nil 就创建cell
if (cell == nil) {
cell = [[[NSBundle mainBundle]loadNibNamed:@"CZTgCell" owner:nil options:nil]lastObject];
}
return cell;
2.为什么定义重用标识符的时候,定义为静态的
cell调用的次数相当多,会创建多次标识符对象,而静态的变量只会创建一次开辟一块内存,节省了内存空间。
3.cell的init方法的注意点
重写init方法,添加子控件时,在这个方法中,需要对控件的一次性属性进行设置,所谓的一次性属性,指的是像文字的大小啊文字的颜色啊之类的固定值,因为这些属性和数据没有关系,提高了性能。
注意:设置控件的frame,直接在init方法中headView的frame没有效果,所以要在layoutSubviews方法中设置各个子控件的frame,这个方法必须重写父类的方法。
4.cell重用的时候,不光要覆盖数据,也应该要覆盖对应的状态,否则重用的时候会把状态和数据都会重用
重用解决:在重写模型的set方法,覆盖数据和状态。
5.cell的行高的问题
cell创建之前多次计算行高,如果行高是固定的,那尽量少用下面的代理方法,因为它会多次调用并计算行高,可以用tableView的rowHeight属性
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;
UITableView中的cell的优化的更多相关文章
- UITableView中复用cell显示信息错乱
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱
UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...
- iOS UITableView中关于cell里的按钮被点击时如何确定是哪一个section
在section=10:row=1:的UITableView中,每一个cell都带有一个按钮,例如如下的图片一样每一个cell中都有一个“进入店铺的按钮”,但是如果我点击相应的cell要进入对应的店铺 ...
- 解决UITableView中Cell重用机制导致内容出错的方法总结
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- ios UITableView中Cell重用机制导致内容重复解决方法
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- iOS学习之UITableView中Cell的操作
接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...
- iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法
"UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...
- UITableView的cell重用优化
三种情况,四种方法: 情况一:加载xib中描述的cell 情况二:加载纯代码自定义的cell 情况三:加载storyBoard中的tableView内的cell 针对于情况一: // 导入自定义cel ...
- UITableView中cell里的UITextField不被弹出键盘挡住
UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类 iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...
随机推荐
- 搭建PHP开发环境
通过两种方式搭建PHP开发环境,而这种开发环境实际是:Apache+MySQL+PHP. 第一种: 通过套件来安装和配置php开发环境. Apache+MySQL+PHP开发环境的搭建(一) 第二种 ...
- 微软公有云Windows Azure 2014-03-26 国内正式商用
新浪科技讯 3月27日早间消息,微软国昨天下午宣布由世纪互联负责运营的Microsoft Azure公有云服务正式商用.这是国内首个正式商用的国际公有云服务平台.而开正式开放商用,意味着任何企业现在都 ...
- Android聚合广告AFP的对接系统设计
工作需要,要对接阿里妈妈的广告聚合平台,简称AFP.对于一般的应用而言,想要流量变现,广告是显而易见的手段,尤其是在中国,打开一个千万级别的用户,肯定有某个地方是有对接广告的,只不过明不明显而已. 阿 ...
- SQL Server代理(7/12):作业活动监视器
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前几篇文章里,你创建配置了SQ ...
- MVC中Action参数绑定的过程
一.题外话 上一篇:MVC中Action的执行过程 ControllerContext 封装有了与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. 二. ...
- ADO.NET基础巩固-----连接类和非连接类
最近的一段时间自己的状态还是不错的,早上,跑步,上自习看书,下午宿舍里面编程实战,晚上要么练习代码,要么去打球(在不打就没机会了),生活还是挺丰富的. 关于C#的基础回顾就先到前面哪里,这 ...
- ASP.NET MVC怎样引用你的model
在视图中,引用model,并绑定.有2种情况,一是数据集,另一个是单个model. 实现之前,有准备一个数据吧. 创建一个model: source code: namespace Insus.NET ...
- 【FTP】在自己的电脑上建立FTP服务器
<1> 添加新用户: “计算机”点击右键 “管理”得到: 点击“本地用户和组”,点击“用户”: 右键 “新用户”: 设定用户名与密码,这是以后连FTP服务器时用的登录用户名与密码. < ...
- 新学C++的for,switch和随机数
通过一个小程序学习: #include<iostream> #include<cstdlib> #include<ctime> using namespace st ...
- android多分辨率多密度下界面适配方案
前言 Android 设计之初就考虑到了UI在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确,UI适配主要受平台两个因素的影响:屏幕尺寸 (屏幕的像素宽度及像素高度)和屏 ...