我遇到分组 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]];
该表仅包含一个图像,不从网络加载任何数据。我想要一些关于我应该花时间修复什么的建议。