iOS 关于UITableView的dequeueReusableCellWithIdentifier
今天看代码的时候,突然想到了以前的一个问题。
刚学ios那会儿,常会写出以下代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"registerCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"registerCell"];
} [cell addSubview:[[UITextField alloc] initWithFrame:CGRectMake(, , , )]]; return cell;
}
这段代码的执行结果就是,屏幕来回滚动几次,cell上不断重复添加子view,内存占用不断提升。
我当时的解决方法是,去掉dequeueReusableCellWithIdentifier方法,其实就是不用系统的重用功能。这种做法的确可以解决不少问题,但是并不是正确的解决方法。
这里要先说一下dequeueReusableCellWithIdentifier的作用,这个方法的作用是检索重用pool,看看之中有没有同样Identifier的cell对象,如果有,那么就把这个对象取出来重用。比如,一屏幕有5个cell,第一屏幕载入后,我又继续滚动了1格,那么第一个cell就滚出了屏幕,就进入了重用pool,当我再滚动一格时,系统就可能会把pool中刚放入的那个cell取出来,重用!所以,虽然我可以滚动无数下,但真正的使用的cell对象只有几个。这样做可以节省内存分配和释放的时间。
根据dequeueReusableCellWithIdentifier的作用我们可以看出,在cellForRowAtIndexPath方法中,不应该含有添加subview之类的操作,cell对象在初始化时就应该包含了所有的view,我们在cellForRowAtIndexPath中仅仅需要操作这些view。
iOS 关于UITableView的dequeueReusableCellWithIdentifier的更多相关文章
- iOS programming UITableView and UITableViewController
iOS programming UITableView and UITableViewController A UITableView displays a single column of dat ...
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...
- iOS 编辑UITableView(根据iOS编程编写)
上个项目我们完成了 JXHomepwner 简单的应用展示,项目地址.本节我们需要在上节项目基础上,增加一些响应用户操作.包括添加,删除和移动表格. 编辑模式 UITableView 有一个名为 e ...
- 【IOS】从android角度来实现(理解)IOS的UITableView
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3403124.html 本人从在学校开始到现在上班(13年毕 ...
- iOS开发 UITableView之cell
1.cell简介 UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 U ...
- iOS之UITableView带滑动操作菜单的Cell
制作一个可以滑动操作的 Table View Cell 本文翻译自 http://www.raywenderlich.com/62435/make-swipeable-table-view-cell- ...
- iOS基础 - UITableView的数据源(dataSource)和代理(delegate)
UITableView的数据源(dataSource)和代理(delegate) UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少 ...
- iOS开发UITableView基本使用方法总结
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
- iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
随机推荐
- hdu2594 KMP
2个字符长合并在一起即可.要注意next[n]的值要小于初始的两个字符串的长度; //next[]存的是之前相同的长度. //也是位置,只是s[i]不一定和s[next[i]]相同 //但是i之前的和 ...
- sql-where
查询表时不一定每一次都要将表格内的资料都完全抓出.在许多时候,我们会需要选择性地抓资料.就我们的例子来说,我们可能只要抓出营业额超过 $1,000 的资料. 要做到这一点,需要用到 WHERE 这个指 ...
- 使用属性表:VS2013上配置OpenCV
以前,windows下配置OpenCV一直不太方便:总是要手动添加lib,添加include,还要配置PATH使得程序运行时候能找到dll文件. 每次新建一个使用OpenCV的工程都要手动添加,很麻烦 ...
- Codeforces 578B "Or" Game
传送门 B. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- 深入浅出Redis04使用Redis数据库(lists类型)
一 lists类型及操作 List是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字. Redis的list类型其实就是一个每个子元素都是sring类 ...
- iOS代码工具箱再续
if (CGRectContainsPoint(self.menuView.frame, point)) { point = [self.view convertPoint:point toView ...
- 一种透明效果的view
设置这个view背景色: [UIColor colorWithRed: green: blue: alpha:0.3]; 效果如下:
- jQuery.cookie.js
一.jQuery.Cookie.js插件是一个轻量级的Cookie管理插件. 下载:http://github.com/carhartl/jquery-cookie/zipball/v1.4.1 特别 ...
- MSF溢出实战教程
1. 进入终端,开启MSF相关服务 2. 连接数据库 3. 主机扫描 发现如果有MS08_067漏洞,就可以继续渗透 4. 开始溢出 溢出成功的话 sessions -l 查看 ...
- Linux下web目录权限设置
1.nginx和php-fpm运行用户为www 2.我们假设web目录所属着为web_owner 3.将web目录的用户和用户组设置为web_owner和www,如下命令:chown -R web_o ...