设置 UITableView 边框 cell 边框 竖线
需引入QuartzCore.framework, 并在相关文件中加入 #import "QuartzCore/QuartzCore.h"
self.tableView.layer.borderWidth = 1; self.tableView.layer.borderColor = [[UIColor blackColor] CGColor];
cellForRowAtIndexPath 内成员变量被释放原因研究(ing...)
资料:
使用uitable的cellForRowAtIndexPath方法里数据对象总被莫名其妙的释放
一个内存释放问题
dequeueReusableCellWithIdentifier的运行机制猜测
这个问题答案核心是这个机制要解决什么样的问题。
关键点在"一个屏幕显示的cell数量"是有限的
当屏幕滚动时候,就会调用方法获取新的cell,而老的cell会在屏幕外面就不显示了
reuse机制就是这样。。当cell需要显示的时候,从queue里面找,找到了,设置一下内容,显示出来
滚动界面当有cell被移出屏幕时,把这个cell丢到queue里面
显示新的cell时,如果有“相同类型”(identifier)的cell,就从队列拿一个出来,设置数据,显示出来
至于queue里面会有多少cell,这个会自动控制
要注意的是,queue里面存储的是cell的实例,不是“原型”
因此就会出现上面说的“假设每页有 5个。 则 第6个复用第1个cell; 第7个复用第2个;”
这样的结果是不管你的table有多少行,内存里实际上都只需要存储一个屏幕那么多行的cell就搞定了。。
参考讨论:http://www.cocoachina.com/bbs/simple/?t21315.html
参考:关于TableViewCell生成时dequeueReusableCellWithIdentifier的认识 写的不错
tableViewCell重用的本质是什么,可以按如下方式理解
当我们创建一个TableViewCell类时,我们通常会写如下两个方法;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { //在此处对用到的空间、属性进行内存分配(如alloc等操作) } -(void)layoutSubviews { // 在此处对控件进行赋值,或者属性变更操作。(万不可在此处进行内存分配操作。) }
其实,在代码层面上,tableView Cell重用机制的本质是,当重用某个cell时,不会再次执行 initWithStyle方法,而是直接执行 layoutSubviews 方法。!