iOS:调试简单的 UI 滞后(我猜是基于 CoreData)

标签 ios objective-c core-data uicollectionview uiswitch

我目前正在测试我的应用程序,尤其是在 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/

相关文章:

ios - 具有关联值的枚举的数据模型

objective-c - 如何在获取的属性中指定多对多属性?

ios - 如何在 mogenerator 中使用类型安全的结构类型核心数据属性?

ios - AWS 无法上传文件

ios - Autolayout 在一行中居中多个元素

ios - 无法从 iPhone Xs Max 获取 UDID | iOS |苹果 |苹果手机

ios - 我可以通过电子邮件将 UIDocuments 作为附件发送吗?

objective-c - LLDB 等同于 gdb 的 future-break?

ios - 编程不向给定的电话号码发送验证码

objective-c - 尝试从非事件对话框获取值时 COCOA 应用程序崩溃