美文网首页
iOS 6:UITableView循环利用、UITableVie

iOS 6:UITableView循环利用、UITableVie

作者: d2cd99b0efce | 来源:发表于2016-03-29 19:31 被阅读58次

    循环利用

    • tableView显示单组数据的时候,总是显示很多的数据,当然tableView不可能一次加载这么多的数据,那样会浪费很多的内存空间。感觉在手机看来,内存的空间,总是比处理器的资源更加珍贵。这时,就需要用到性能优化了。
    • tableView自身会有一个缓存,将cell绑定标识符来进行识别,并实现内存空间的循环利用。当然一开始缓存中并没有这样的cell,所以需要初始创建若干cell,当此cell不再视野中时,就会被抛弃到缓存中,然后被赋予另一个数据,仍旧是同样的内存空间,并显示出来。
    • 当cell滚动非常快的时候,cell的覆盖并非是按照顺序进行的。
    • dequeueReusableCellWithIdentifier:,去缓存池中查找可循环利用的cell,如果没有的话,就需要自己去创建了。在storyboard设置有identifier的cell,不需要自己创建,默认的回去storyboard里面找有没有这个标识符的cell。
    • reigsterClass
    //objc
    // 注册某个标识对应的cell类型
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
    
    • 几个常用的方法

      • select
      • deselect
      • willSelect
      • willDeselect
      • heightForRow
      • viewForHeader
      • heightForHeader
    • tableViewDelegate 协议继承于 scrollViewDelegate,可以自动继承了方法scrollViewDidScroll

    cell

    • cell的属性

      • selectionStyle 选中的样式
      • selectedBackgroundView 选中的背景色视图
      • backgroundColor / backgroundView 默认的背景色
      • accessoryType / accessoryView 设置指示器
    • 定义等高的cell

      • xib生成cell
        • registerNib
      • storyboard生成cell
      • 代码生成cell,使用frame来约束,当父控件的frame发生改变的时候,自动调用layoutSubViews: 来对子控件自动布局
      • 代码生成cell,使用autoLayout自动布局,不需要放在layoutSubviews:方法中
      • 技巧:通过设置背景色,来查看约束是否正确,或者用层级调试工具degug
    • 定义非等高的cell

      • 当cell的宽度随着UILable中字数以及UIImageView的有无,来随时调整cell的高度
      • heightForRowAtIndexPath: 方法的调用是在cellForRowAtIndexPath:之前。等程序确定了所有行的高度之后,才会调用返回cell的函数。
      • 在heightForRowAtIndexPath:中调用cellForRowAtIndexPath:。返回cell的函数是拿出显示出来的cell。当cell还没有创建的时候,返回来的是nil。
      • 那么cell的高度到底如何来确定呢
      • 使用estimatedHeightForRowAtIndexPath:方法,当程序知道了估计的高度之后,先调用cellForRowAtIndexPath:,然后再调用heightForRowAtIndexPath:。
      • 由于UITableViewController不知道创建cell内部的子控件细节;在cell的自定义代码中,返回height函数,让外界来调用。
      • 强制布局 [cell layoutIfNeeded],这个很重要。一般情况下,控件的属性布局在tableView显示之前的那一刻去计算,但是要提前获取这些cell的高度,就需要强制去提醒tableView现在就去计算。
    • KVC 键值编码
      • 方法:setValuesForKeysWithDictionary
      • 不是按照顺序匹配,是找到与字典的key同属性名的value,并设置
      • number -> bool 根据类型会有自动转化,有点智能

    tips

    • static 修饰局部变量的时候,初始化一次,内存中只有一份。防止一个对象被连续的创建被销毁,但是设置成全局变量又有着代码管理的复杂性弊端。
    • 定义一条线: separator分割线 将UIView的高度设置成1即可。

    相关文章

      网友评论

          本文标题:iOS 6:UITableView循环利用、UITableVie

          本文链接:https://www.haomeiwen.com/subject/fcuslttx.html