0

我遇到分组 UITableView 的加载时间很长。我阅读了有关该主题的其他一些帖子,但找不到任何可以提高性能的东西。我正在寻找有人指出我重新设计代码的正确方向。

有8个部分和32个单元格。这些单元属于五个不同的自定义 UITableView Cell 子类之一。子类包含子视图并使用 IB 放在一起。

TableView 数据是从一个 plist 生成的,该 plist 还包含有关单元格类型、标签和要由 UINavigationController 推送的 View Controller Link 的信息。xml 文件的示例如下所示。复杂的 pList 可能是问题的一部分吗?

<dict>
        <key>Header</key>
        <string>Property Information</string>
        <key>Data</key>
        <array>
            <dict>
                <key>TableView</key>
                <string>informationTable</string>
                <key>Link</key>
                <string>ROIPropertyInfoUIViewController</string>
                <key>Entity</key>
                <string></string>
                <key>Image Name</key>
                <string>runtime</string>
                <key>Cell Type</key>
                <string>ROIUITableViewCellType3</string>
                <key>Label</key>
                <string>runtime</string>
            </dict>
        </array>
    </dict>

另一个潜在的问题是一个非常长的cellForRowAtIndexPath方法,它根据 plist 文件中写入的内容来决定加载哪个类的 UITableViewCell。这可能是一个促成因素吗?

下面是解析代码:

-(void)setPlistFilename:(NSString *)pList forTableView:(UITableView *)tableView

if (tableView==mainTableView) {
        NSString *path = [[NSBundle mainBundle] pathForResource:pList ofType:@"plist"];
        self.mainTableDataArray = [[NSArray alloc ] initWithContentsOfFile:path];
        NSLog(@"count of mainTableArray is %d", mainTableDataArray.count);
}

[tableView setDataSource:self]; [tableView setDelegate:self];

[tableView setSectionFooterHeight:0];
[tableView setSectionHeaderHeight:0];

}

这是我cellForRowAtIndexPath方法的一部分:

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    NSMutableArray *tmpDataSet = [[NSMutableArray alloc]init];


    if (tableView==self.mainTableView) {
        int section = [indexPath section];
        tmpDataSet = [[self.mainTableDataArray objectAtIndex:section] valueForKey:@"Data"];
    }


         //**Figure out the cell type
    NSString *cellTypeString = [[tmpDataSet objectAtIndex:[indexPath row]] valueForKey:@"Cell Type"];
    NSLog(@"cell type string is %@", cellTypeString);
//***Create the different types of cells depending on what is listed in the pList***
    if ([cellTypeString isEqualToString:@"ROIUITableViewCellType1"]) {
        ROIUITableViewCellType1 *c = [tableView dequeueReusableCellWithIdentifier:cellTypeString];

        if(!c)
        {
            c = [[ROIUITableViewCellType1 alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellTypeString];

        }
      //  mainTableViewHeight += [ROIUITableViewCellType1 retrunCellHeight];
        NSLog(@"mainTableViewHeight = %f", self.mainTableViewHeight);

        return [self setCellContentFromDataArray:tmpDataSet forCell:c forIndexNumer:[indexPath row]];

该表仅包含一个图像,不从网络加载任何数据。我想要一些关于我应该花时间修复什么的建议。

4

0 回答 0