我目前正在测试我的应用程序,尤其是在 iPhone 4s 上。一些简单的 UI 任务看起来滞后和延迟,例如在 Collection View 中选择图像或更改 UI 复选框的状态。有没有更好的方法来做到这一点?我需要在这里做一些异步的事情吗?如果更改了某些内容,则 CoreData 中的属性也会更改,但这会这么慢吗?
CollectionView(图片名称都保存在viewdidload上的一个数组中):
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"IconCell";
IconSelectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.iconImageView.image = [UIImage imageNamed:[self.icons objectAtIndex:indexPath.row]];
return cell;
}
#pragma mark Collection View Delegate methods
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
self.mainCategory.icon = [self.icons objectAtIndex:indexPath.row];
}
以 UISwitch 为例:
- (IBAction)liveBudgetSwitched:(id)sender
{
self.spendingCategory.liveBudget = [NSNumber numberWithBool: self.liveBudgetSwitch.on];
}
最佳答案
用那个代码很难帮你。可能有很多事情。也许您的图像比应有的大得多,也许您的单元格在一个标签或背景中有阴影,谁知道呢?
因此,您需要先找出问题所在。
这种情况可以打开仪器分析问题是CPU还是GPU。
您可以使用 Time Profiler 了解问题是否出在 CPU 上,而对于 GPU,您可以使用 Core Animation。
在时间分析器中尝试检查 CPU 消耗最多的地方。您可以使用一些选项来帮助您专注于您的代码。您可以仅显示 objective-c 和隐藏系统库。
在 Core Animation 中,您有许多选项可以用来检查您可能遇到的一些问题。这个选项是:
- Color Blended Layers - 突出显示多个层彼此叠加且 GPU 需要混合这些层的地方
- 颜色为绿色而没有为红色 - 如果它是绿色,那么你很好,如果它是红色,那么你没有缓存你的图像,这些图像会被重新生成很多次(它可以例如,当你有阴影时就会发生)
- 彩色复制图像 - 如果它显示蓝色,则核心动画在应该发送指针时将图像副本发送到渲染服务器
- Flash Updated Regions - 重绘 View 时显示黄色
关于iOS:调试简单的 UI 滞后(我猜是基于 CoreData),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899782/