【发布时间】:2013-12-15 16:49:33
【问题描述】:
我正在使用 UINavigationController 开发 iOS 应用程序。我遇到了性能问题,每次加载视图时,加载新视图所需的时间增加约 0.1 秒。我希望有人可以就如何解决这个问题提供一般性建议。
我在下面包含了分析数据。似乎没有任何无限增长或内存泄漏。
有关该应用程序的更多信息:它具有相当数量的视图(超过 20 个),并且具有相当复杂的表格视图,其中包含许多不同的自定义单元格。我使用一个基础视图控制器,其中包含我为每个单独的视图控制器子类化的所有表格视图和导航代码。
以下是加载显示此性能问题的视图的示例代码:
-(IBAction)evaluateTapped:(id)sender
{
NSArray *arrayOfPropertiesToLoad = [self.sharedStore requestAnArrayOfObjectsWithEntityDescription:@"Property" forWhichAttribute:@"isEvaluated" isEqualTo:[NSNumber numberWithBool:YES]];
NSArray *sortedArray = [[OzStore sharedStore] sortArray:arrayOfPropertiesToLoad withKey:@"id" ascending:NO];
NSMutableArray *mutSortedArray = [NSMutableArray arrayWithArray:sortedArray];
OzEvaluatePropertyListViewController *propertyList = [[OzEvaluatePropertyListViewController alloc] initWithNibName:nil bundle:nil withSortedDataArray:mutSortedArray useCellClass:@"OzPropertyCell" withUnit:nil];
[self.navigationController pushViewController:propertyList animated:YES];
}
【问题讨论】:
-
您是否尝试过时间分析以查看在额外时间内发生了什么?另外,显示一些关于视图创建的代码——那里有循环吗?
-
除了 Time Profiler 工具之外,您还可以在代码中的各个点调用 CFAbsoluteTimeGetCurrent() 并查看花费最多时间的位置
-
我使用了时间分析,似乎所有最耗时的方法都会增加时间。最上面的方法是 cellForRowAtIndexPath。我有很多子视图的自定义 UITableViewCells,我认为这会损害我的表现。然而,仅此一点并不能解释为什么我的表现会随着时间的推移而恶化。
标签: ios performance memory-leaks profiling