UITableViewCell的层次结构

一直在用UITableViewCell,但是一直对它里面装的那些子控件的层次结构不十分的清楚,今天在网上找到了一段输出控件的层次结构的代码,博客地址:http://blog.csdn.net/hamasn/article/details/8216584,于是写了一个简单的Demo输出了一下cell的层次结构,cell的设置如下:

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        
        cell.imageView.image = [UIImage imageNamed:@"search.png"];
        
        cell.textLabel.text = [NSString stringWithFormat:@"cell_%ld", (long)indexPath.row];
        cell.accessoryType = UITableViewCellAccessoryDetailButton;
        
        // cell.backgroundView默认为nil
        UIView *view = [[UIView alloc] initWithFrame:cell.frame];
        view.backgroundColor = [UIColor yellowColor];
        cell.backgroundView = view;
        
        if (indexPath.row == 0) {
            NSLog(@"The view tree:\n%@", [self displayViews:cell]);
        }

输出如下:

2014-02-10 17:28:14.764 TestTableViewCell[1489:a0b] The view tree:

[ 0] UITableViewCell

--[ 1] UITableViewCellScrollView

----[ 2] UIView   ---------backgroundView 默认是nil的

----[ 2] UITableViewCellContentView

------[ 3] UIImageView

------[ 3] UILabel

----[ 2] UIButton --------那个accessoryDetailButton,与contentView是一层的


==============顺便看一下UITableView的delegate和dataSource中的方法的执行顺序==========

1、tableView: numberOfRowsInSection:

2、tableView: heightForRowAtIndexPath:

3、tableView: cellForRowAtIndexPath:

想一想自己之前的代码,居然在tableView: heightForRowAtIndexPath:中调用tableView: cellForRowAtIndexPath:,然后返回cell的高度,tableView: heightForRowAtIndexPath:是每刷新一次每一行都会请求一次,不管cell当前是否显示,这样每次刷新都多执行了rowCount个tableView: cellForRowAtIndexPath:方法,极大的浪费性能啊!!!

还是得把cell的高度计算好存储起来,在cocoachina上看到一篇文章提到的建议比较好,将cell高度的计算放在异步请求拉回数据后就计算,这样就不会因为计算行高耗时而使tableview卡。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值