我遇到了分组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]];
表仅包含一个图像,不会从网络加载任何数据。 我想就我应该花时间修理的问题提出一些建议。