iOS学习心得——UITableViewCell的复用

UITableView是在iOS开发中最经常使用的控件之一。个人第一篇学习心得献给它了 偷笑
        UITableView是由一行一行的UITableViewCell构成的。
        首先想这样一个问题:如今用UITableView去作一个联系人列表,若是我有10个100个联系人,那我能够建10个100    个UITableViewCell,可是若是有一千一万个呢,建立这么多Cell是否是会很影响手机的性能而且形成很差的用户体验呢?
        所以,苹果官方给出的解决方案是采用复用机制。
        什么是复用机制?简单点回答:若是有我就用,没有我就建立。就好比吃饭须要用筷子,若是如今我家里有筷子固然我就用家里的筷子,若是家里没有筷子我就去买筷子。买了筷子固然不会用一次,买了以后下次就是用买的筷子。固然这个例子不是特别恰当,领会精神为主。说不用筷子用勺子或者用一次性筷子的我不想看见大家。
        来看看UITableViewCell建立的标准代码:
    static NSString *CellTableIdentifier = @"only";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
    if (cell == nil) {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier] autorelease];
}
咱们这样来理解:
若是有100行cell,根据cell高度和屏幕高度,咱们每次只能显示10行cell,咱们在滑动屏幕时,咱们已经建立的cell会被划没看不见,可是它们并无消失,而是至关于进入一个复用的队列。而后当须要新建cell的时候,先到这个复用队列里看看,若是有的话,咱们就去复用队列里取出这个cell使用,若是没有的话咱们才去真正的建立一个,这样就避免了屡次重复的建立UITableViewCell,对内存空间的使用起到了很好的控制做用。
 
static NSString *CellTableIdentifier = @"only";
        这行代码定义了一个静态的字符串,用来当作cell的标识,static 关键字保证了惟一性
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
        接下来就该建立cell了。根据咱们的逻辑,若是复用队列中有可用的cell的话,咱们是优先使用的,所以,咱们首先要去复用队列中寻找是否有咱们须要的可用的cell,因此当前的tableView调用dequeueReusableCellWithIdentifier方法,参数就是咱们定义的标识。若是复用队列中有可用的cell,那么返回值就是这个可用的cell,若是没有的话返回的是个nil。
 
        第一次咱们什么都没有, 因此必然返回的是nil,于是进入到if的判断条件中,在这里,才是咱们真正的的第一次去建立cell。
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier] autorelease];
        能够看到,咱们在内存中为cell开辟了新的空间,生成新的cell,同时为cell附上它独有的标识符,在它进入到复用队列里之后,咱们经过标识符来寻找咱们所须要的cell。
相关文章
相关标签/搜索