UITabelView 详解

设置 UITableView 边框  cell 边框  竖线

需引入QuartzCore.framework, 并在相关文件中加入 #import "QuartzCore/QuartzCore.h"

 

self.tableView.layer.borderWidth = 1;
self.tableView.layer.borderColor = [[UIColor blackColor] CGColor];

 

 cellForRowAtIndexPath 内成员变量被释放原因研究(ing...)

资料:

IOS解决UITableView滚动时崩溃 

使用uitable的cellForRowAtIndexPath方法里数据对象总被莫名其妙的释放

一个内存释放问题   

参考:IOS控件UITableView详解

 

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 方法。!

 

posted @ 2013-05-19 18:50  ygm900  阅读(927)  评论(0编辑  收藏  举报