在 Objective-C 中调试应用程序图稿变慢

Posted

技术标签:

【中文标题】在 Objective-C 中调试应用程序图稿变慢【英文标题】:Debugging app artwork slow down in Objective-C 【发布时间】:2012-07-25 13:08:46 【问题描述】:

我有一个 tableviewcontroller,特别是在我的应用程序中,滚动时有点紧张。

我相当肯定这是因为我的自定义 UISegmentedControl 外观,我的表格中有四个,每个都在自己的单元格中。

我在我的应用委托中使用此代码来自定义它们:

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControlSelected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                             [UIColor whiteColor], UITextAttributeTextColor,
                                                             [UIColor grayColor], UITextAttributeTextShadowColor,
                                                             [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset,
                                                             [UIFont fontWithName:@"Georgia-Italic" size:0.0], UITextAttributeFont,
                                                             nil] forState:UIControlStateNormal];

为什么这会导致速度如此缓慢?我可以做些什么来提高性能?当它们出现在屏幕上时,它会抖动。我以前从来没有遇到过这样的问题。

我很确定它是开关和分段控件,因为当我移除它们时,它会加速并且变得如丝般顺滑。我基本上是这样做的:

if (indexPath.row == 0)
        
            cell.textLabel.text = @"text";
            UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"1", @"2", nil]];
            [segControl setSelectedSegmentIndex:[myBool boolValue]];
            [segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
            [segControl addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventValueChanged];
            cell.accessoryView = segControl;
        

在我的cellForRowAtIndexPath 7 次中,我怎样才能让它更快?

【问题讨论】:

我看不出这种外观定制会影响到这一点的任何原因,除非您弄乱了图像尺寸。你的 cellForRowAtIndexPath 是什么样的? 添加了一些额外信息进行了编辑。 【参考方案1】:

我有一个正在开发的应用程序,并且有一些类似的自定义设置。我建议重用设置控件...您可以通过创建 UITableViewCell 子类并在其中设置您的 seg 控件来完成此操作,然后您可以为需要自定义的内容创建插座。

快速搜索找到了这个教程,看起来就像我在说什么

UITableViewCell Prototype Tutorial

这样您的细胞将完全可重复使用,因此速度更快。

但是,我现在不知道您的确切用例,所以也许这不适用于您。它通过自定义按钮、艺术和动画加速了我的单元格。

记住 alloc 初始化非常慢。

我猜另一种选择是使用控件预先初始化所有可以使用的控件,并将它们存储在数组中,然后仅将它们加载到 cellForRowAtIndexPath 中:

【讨论】:

以上是关于在 Objective-C 中调试应用程序图稿变慢的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 列表中显示 MPMediaItem 图稿?

在 Swift 和 AVPlayer 中显示音频流的图稿? [复制]

NSImage 标准图稿和图标 NSImageNameStatusAvailable

具有 Objective-C 和 swift 代码的应用程序在发布模式下启动时崩溃,调试模式正常

MPMediaItemArtwork 返回尺寸错误的图稿

无法在 Xcode 控制台中从 Objective-C 记录 Swift Singletons