具有UITextView的单元格的初始延迟

时间:2017-03-22 14:11:15

标签: ios swift ipad uitextview instruments

当前设置

我有一个自定义单元格,从xib加载,其大部分空间都被UITextview覆盖。该单元格也可能有一些文本视图。此单元格内部还有更多元素(一个UIView + 2个UILabel)。

问题

即使我只有一个textview,我也尝试删除所有这些视图并延迟停留。此外,滞后只是第一次发生。稍后,当我向下滚动并进入另一个带有textview的单元格时,根本不会发生延迟。

其他信息

此自定义单元格的内容是将textview添加到UIStackView。一开始,stackview是空的,因为我不知道(在开发时)可能/应该有多少textview。

我知道这是另一件可能影响性能的事情,但是我已经解决了它(我想尽可能最好),通过检查在出列a中时在stackview的arrangedSubviews数组中已找到多少个文本视图单元格,基于该信息,我只是适当地添加或隐藏视图(而不是每次都要销毁和重新创建所需数量的文本视图)。

我尝试使用Instruments,但是我没有注意到我的任何类占用CPU时间,而是内部框架调用的一些UIKit方法调用是导致这种情况的原因...如果需要,我可以发布截图,但我想这是不相关的,因为那些似乎是通常的系统&框架调用。另外我在iPad 2上测试:D也许这是一件事(我必须针对慢速设备优化应用程序)。

不过,我想我可以以某种方式优化它?

MyCell类相当简单(伪代码):

class MyCell:UITableViewCell{

    func configure(data:SomeData){

        self.addOrHideViewsIfNeeded()
    }

    private func addOrHideViewsIfNeeded(){
        //here, I check if stackview.arrangedSubviews has, and how many subviews are there, and
        //add / hide them appropriately, means if I have to add them, I load them from the nib, otherwise, I reuse views from by adding them/removing them from a pool.
    }
}

与Release版本相比,Debug版本中的延迟更为明显,这是有道理的,但仍然很明显。

2 个答案:

答案 0 :(得分:2)

您可能需要检查是否重新使用单元格。

您可以按以下方式重复使用它:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NAIndexPath *) indexPath{

static NSString *cellIdentifier = @"Mycell";

cell = [tableView dequeueCellWithIdentifier:cellIdentifier];

if(cell == nil)
    cell = [[MyCell alloc] initWithStyle: UITableViewCellStyleDefault    reuseIdentifier: cellIdentifier];
 }

答案 1 :(得分:1)

好的,这是我的想法草图,用于从用户透视表tableview第0行进行预览。

build.gradle