提高分组UITableView的性能

时间:2013-04-09 03:45:41

标签: uitableview

我遇到了分组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]];

表仅包含一个图像,不会从网络加载任何数据。 我想就我应该花时间修理的问题提出一些建议。

0 个答案:

没有答案